【发布时间】:2021-09-30 22:54:52
【问题描述】:
有没有办法将使用 vanilla Matplotlib 创建的附加子图添加到(下方)Seaborn 联合图,共享 x 轴?理想情况下,我想控制联合图和附加图之间的比率(类似于gridspec_kw={'height_ratios':[3, 1, 1]}
我试图通过在 Matplotlib 子图中调整 figsize 来伪造它,但是当边缘图中的 KDE 曲线发生变化时,它显然不能很好地工作。虽然我可以手动调整输出 PNG 的大小以缩小/放大其中一个数字,但我希望所有内容都自动对齐。
我知道联合网格的设置方式很棘手,但对于熟悉 Seaborn 基础的人来说,这可能相当简单。
这是一个最小的工作示例,但有两个单独的数字:
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
图一
diamonds = sns.load_dataset('diamonds')
g = sns.jointplot(
data=diamonds,
x="carat",
y="price",
hue="cut",
xlim=(1, 2),
)
g.ax_marg_x.remove()
图2
fig, (ax1, ax2) = plt.subplots(2,1,sharex=True)
ax1.scatter(x=diamonds["carat"], y=diamonds["depth"], color="gray", edgecolor="black")
ax1.set_xlim([1, 2])
ax1.set_ylabel("depth")
ax2.scatter(x=diamonds["carat"], y=diamonds["table"], color="gray", edgecolor="black")
ax2.set_xlabel("carat")
ax2.set_ylabel("table")
期望的输出:
【问题讨论】:
-
简短的回答是否定的。见seaborn.JointGrid。您可能需要自己构建它,使用 GridSpec 和子图。见Matplotlib different size subplots
标签: matplotlib seaborn jointplot