Это невозможно сделать без взлома. jointplot
вызывает метод JointGrid
, который в свою очередь создает новый объект figure
каждый раз, когда он вызывается.
Таким образом, взлом состоит в том, чтобы сделать два сундука (JG1
JG2
), затем сделать новую фигуру, а затем перенести объекты осей из JG1
JG2
в новую созданную фигуру.
Наконец, мы корректируем размеры и позиции подзаголовков на новом рисунке, который мы только что создали.
JG1 = sns.jointplot("C1", "C2", data=df, kind='reg')
JG2 = sns.jointplot("C1", "C2", data=df, kind='kde')
#subplots migration
f = plt.figure()
for J in [JG1, JG2]:
for A in J.fig.axes:
f._axstack.add(f._make_key(A), A)
#subplots size adjustment
f.axes[0].set_position([0.05, 0.05, 0.4, 0.4])
f.axes[1].set_position([0.05, 0.45, 0.4, 0.05])
f.axes[2].set_position([0.45, 0.05, 0.05, 0.4])
f.axes[3].set_position([0.55, 0.05, 0.4, 0.4])
f.axes[4].set_position([0.55, 0.45, 0.4, 0.05])
f.axes[5].set_position([0.95, 0.05, 0.05, 0.4])
Это взломать, потому что теперь мы используем частные методы _axstack
и _add_key
, которые могут и не оставаться такими же, как сейчас, в будущих версиях matplotlib
.
SELECT * FROM foo
LEFT OUTER JOIN (foo2bar JOIN bar ON (foo2bar.bid = bar.bid AND zid = 30))
USING (fid);
Протестированный на MySQL 5.0.51.
Это не подзапрос, он просто использует круглые скобки для определения приоритета соединений.
SELECT * FROM
foo LEFT JOIN
(
Foo2bar JOIN bar
ON foo2bar.bid = bar.bid AND zid = 30
)
ON foo.fid = foo2bar.fid;
непротестированный
Разрабатывая его, можно запустить с выбора. Не включайте столбцы, которые Вы не хотите в конечном счете видеть.
SELECT foo.fid, bar.value
Затем мы можем сделать оператор Where, который видит, так же, как Вы выразили его.
SELECT foo.fid, bar.value
WHERE bar.zid = 30
Теперь хитрая часть для соединения вещей вместе для нашего ИЗ пункта, с помощью ОСТАВЛЕННЫЙ СОЕДИНЕНИЯ, потому что мы хотим видеть каждый клин, существуют ли промежуточные соответствия:
SELECT foo.fid, bar.value
FROM foo
LEFT JOIN foo2bar ON foo.fid = foo2bar.fid
LEFT JOIN bar ON foo2bar.bid = bar.bid
WHERE bar.zid = 30
OR bar.zid IS NULL
Если Вы не возвращаете строку для клина =, 3 затем Ваших сервера повреждаются.
Этот код должен сделать то, что я думаю, что Вы хотите:
SELECT
F.fid,
SQ.value
FROM
dbo.Foo F
LEFT OUTER JOIN
(
SELECT F2B.fid, B.value
FROM dbo.Bar B
INNER JOIN dbo.Foo2Bar F2B ON F2B.bid = B.bid WHERE B.zid = 30
) SQ ON SQ.fid = F.fid
Имеют в виду, что возможно возвратить два значения для клина, если это связано с двумя панелями с zid 30.
FWIW, вопрос не действительно о many-many: это могло вполне просто быть сделано как объединение.
А реальный many-many в SQL ПЕРЕКРЕСТНОЕ ОБЪЕДИНЕНИЕ