Matplotlib:获取和设置轴位置

new9mtju  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(108)

在matlab中,可以直接获取和设置图形上现有轴的位置:

pos = get(gca(), 'position')
set(gca(), 'position', pos)

字符串
如何在matplotlib中做到这一点?
我需要这个有两个相关的原因:
这些是我试图解决的具体问题:

  • 我有一列子图,其中有些有颜色条,有些没有,它们的宽度不一样。X轴没有对齐颜色条从轴中窃取空间。这也发生在matlab中,在那里,我会使用上面的技巧,通过将宽度从带有颜色条的轴复制到没有颜色条的轴,使所有轴的宽度相等。
  • 通过收缩轴在各个子图之间添加空间。adjust_subplots()函数对所有子图进行相同的调整。
xzlaal3s

xzlaal3s1#

在Matplotlib中设置轴位置类似。可以使用axes.的get_position和set_position方法

import matplotlib.pyplot as plt

ax = plt.subplot(111)
pos1 = ax.get_position() # get the original position 
pos2 = [pos1.x0 + 0.3, pos1.y0 + 0.3,  pos1.width / 2.0, pos1.height / 2.0] 
ax.set_position(pos2) # set a new position

字符串
如果您还没有看过GridSpec,您可能还想看一下。

llmtgqce

llmtgqce2#

get_position()_position得到ax的位置; set_position()existingax设置在图中的新位置。
但是,对于许多情况,最好在图中的特定位置添加一个 * 新 * 轴,在这种情况下,add_axes()可能有用。它允许以非常灵活的方式向现有图形添加轴(和绘图)。例如,在下面的代码中,一个折线图(绘制在ax2上)叠加在一个散点图(绘制在ax1上)上。

import matplotlib.pyplot as plt
x = range(10)

fig, ax1 = plt.subplots()
ax1.scatter(x, x)
# get positional data of the current axes
l, b, w, h = ax1.get_position().bounds

# add new axes on the figure at a specific location
ax2 = fig.add_axes([l+w*0.6, b+h/10, w/3, h/3])
# plot on the new axes
ax2.plot(x, x);

字符串
可以使用pyplot制作相同的图,如下所示。

plt.scatter(x, x)
l, b, w, h = plt.gca()._position.bounds
plt.gcf().add_axes([l+w*0.6, b+h/10, w/3, h/3])
plt.plot(x, x);


x1c 0d1x的数据
add_axes特别适用于OP的颜色条从坐标轴“窃取”空间的特定问题;因为它允许在旁边添加 * 另一个 * 轴,而不是改变轴本身的位置,可以用来绘制颜色条。1

import matplotlib.pyplot as plt

data = [[0, 1, 2], [2, 0, 1]]

fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(data)                               # without colorbar
im = ax2.imshow(data)                          # with colorbar
l, b, w, h = ax2.get_position().bounds         # get position of `ax2`
cax = fig.add_axes([l + w + 0.03, b, 0.03, h]) # add colorbar's axes next to `ax2`
fig.colorbar(im, cax=cax)



如您所见,两个轴具有相同的尺寸。
1:这是基于my answer到另一个Stack Overflow的问题。

相关问题