gpt4 book ai didi

python - 防止 GridSpec 子图分离随图形大小而变化

转载 作者:太空狗 更新时间:2023-10-30 01:00:28 25 4
gpt4 key购买 nike

我想创建一个没有中间空间的地 block 网格。

看起来像这样:

enter image description here

代码 1

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

fig = plt.figure()

gs = GridSpec(2, 2, wspace=0.0, hspace=0.0)

ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, 0])
ax4 = fig.add_subplot(gs[1, 1])

fig.show()

但是,当我添加数据时,子图之间的间距取决于图形的尺寸。 (可以通过更改 fig.show() 打开的窗口的尺寸来查看。)

举个例子:

enter image description here

代码 2

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

import numpy as np

fig = plt.figure()

gs = GridSpec(2, 2, wspace=0.0, hspace=0.0)

ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, 0])
ax4 = fig.add_subplot(gs[1, 1])

for axis in [ax1, ax2, ax3, ax4]:
axis.imshow(np.random.random((10,10)))

fig.show()

那么,最好还是使用 GridSpec,是否可以强制绘图保持在一起?
我能想到的唯一其他选择是访问绘图的大小并在 plt.figure(figsize=(##,##)) 中使用这些维度,但我似乎无法访问数字。

注意:地 block 的数量以及高/宽比会有所不同。 (例如 GridSpec(2, 3, width_ratios=[10,10,1], wspace=0.0, hspace=0.0) 我将使用最后一列来保存用于所有情节。)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~Python 2.7.10,Matplotlib 1.4.3~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~

最佳答案

我发现了两种快速但肮脏的方法:

方法一:使用figsize

plt.figure 中的 figsize 关键字参数设置为与数据具有相同纵横比的宽度和高度,这个小努力效果相当好。

Result from Method 1

方法一

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

import numpy as np

length_x_axis = 30
length_y_axis = 10

rows = 3
columns = 2

fig_height = 5.

height = length_y_axis * rows
width = length_x_axis * columns

plot_aspect_ratio= float(width)/float(height)

fig = plt.figure(figsize=(fig_height * plot_aspect_ratio, fig_height ))

gs = GridSpec(rows, columns, wspace=0.0, hspace=0.0)

ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, 0])
ax4 = fig.add_subplot(gs[1, 1])
ax5 = fig.add_subplot(gs[2, 0])
ax6 = fig.add_subplot(gs[2, 1])

for axis in [ax1, ax2, ax3, ax4, ax5, ax6]:
axis.imshow(np.random.random((length_y_axis , length_x_axis )))

fig.savefig("testing.png")

方法二:使用set_anchor

对每个轴使用 set_anchor 方法可以获得更好的结果,但它需要更多的努力,并且从一些快速测试来看,它不适用于大于 3x2 的绘图数组。

Result from Method 2

方法二

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

import numpy as np

fig = plt.figure()
gs = GridSpec(2, 3, wspace=0.0, hspace=0.0)

ax1 = fig.add_subplot(gs[0, 0])
ax1.set_anchor("SE")

ax2 = fig.add_subplot(gs[0, 1])
ax2.set_anchor("S")

ax3 = fig.add_subplot(gs[0, 2])
ax3.set_anchor("SW")

ax4 = fig.add_subplot(gs[1, 0])
ax4.set_anchor("NE")

ax5 = fig.add_subplot(gs[1, 1])
ax5.set_anchor("N")

ax6 = fig.add_subplot(gs[1, 2])
ax6.set_anchor("NW")

for axis in [ax1, ax2, ax3, ax4, ax5, ax6]:
axis.imshow(np.random.random((10 , 10 )))

fig.show()

关于python - 防止 GridSpec 子图分离随图形大小而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34887328/

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