gpt4 book ai didi

python - 在 Matplotlib 3 中设置具有共享轴的物理方形子图

转载 作者:行者123 更新时间:2023-12-01 08:27:40 25 4
gpt4 key购买 nike

我正在尝试创建一个与seaborn 所做的类似的绘图,但在 native matplotlib 中。

我正在将数据框中的每个系列与图矩阵中的每个其他系列进行比较。

到目前为止,我已经绘制了它,标记了外轴,并将轴设置为沿列和行共享(因为这最适合数据)。

我未能管理的最后一步是使所有图的尺寸在物理上呈正方形。代码如下:

#scatter matrix

def plot_scatter_matrix(data):
dim = len(data.columns.values)
fig, axs = newfigure(dim, dim, sharex='col', sharey='row', figsize=(10,10))
fig.tight_layout()
for row, iname in enumerate(data.columns.values):
for col, jname in enumerate(data.columns.values):
axs[row,col].scatter(data[jname], data[iname])
if col == 0:
axs[row,col].set_ylabel(iname)
if row == len(data.columns.values)-1:
axs[row,col].set_xlabel(jname)

return fig, axs

fig, axs = plot_scatter_matrix(ndata)
plt.show()

实现这一点(仅显示上半部分):

im1

我尝试在调用 scatter() 后使用 axs[row,col].set_aspect(1.0, adjustment='box', share=True)然而它只是导致了这个:

im2

正如您所看到的,有些设法在物理上变成正方形,但它们的尺寸都不同。

在广泛查看文档和其他问题后,我被难住了。当用于此类事情的其他方法在过去的版本中已被弃用时,这并不会使它变得更容易。

最佳答案

如果某些轴通过使用 set_aspect(1.0) (或等效的 set_aspect("equal"))变成方形,这或多或少是巧合,并且只有当轴极限差实际上是相等的;例如当 x 和 y 的数据范围相同时。

当然,您可以共享所有轴,而不仅仅是按列或按行。这将确保所有轴具有相同的形状 - 但不一定是方形的。

方轴的要求是纵横比是 x 和 y 范围的商。

ax.set_aspect(np.diff(ax.get_xlim())/np.diff(ax.get_ylim()))

另请参阅:How to make sure that both x and y axes of plot are of equal sizes?

另一个选项是通过子图参数限制子图的空间,如 this answer 所示。至python interplay between axis('square') and set_xlim .

关于python - 在 Matplotlib 3 中设置具有共享轴的物理方形子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com