Rut*_*thC 17 python matplotlib
是否可以在创建轴后设置matplotlib子图的大小/位置?我知道我能做到:
import matplotlib.pyplot as plt
ax = plt.subplot(111)
ax.change_geometry(3,1,1)
Run Code Online (Sandbox Code Playgroud)
把轴放在三排的顶行.但是我想让轴跨越前两排.我试过这个:
import matplotlib.gridspec as gridspec
ax = plt.subplot(111)
gs = gridspec.GridSpec(3,1)
ax.set_subplotspec(gs[0:2])
Run Code Online (Sandbox Code Playgroud)
但轴仍然填满了整个窗口.
为清晰起见, 我想更改现有轴实例的位置,而不是在创建它时设置它.这是因为每次添加数据时都会修改轴的范围(使用cartopy在地图上绘制数据).地图可能变得高而窄,或短而宽(或介于两者之间).因此,在绘图功能之后将决定网格布局.
Rut*_*thC 12
感谢Molly指出我正确的方向,我有一个解决方案:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
ax = fig.add_subplot(111)
gs = gridspec.GridSpec(3,1)
ax.set_position(gs[0:2].get_position(fig))
ax.set_subplotspec(gs[0:2]) # only necessary if using tight_layout()
fig.add_subplot(gs[2])
fig.tight_layout() # not strictly part of the question
plt.show()
Run Code Online (Sandbox Code Playgroud)
您可以使用subplot2grid的rowspan
参数创建一个具有一个跨两行的子图和一个跨一行的子图的图形:
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = plt.subplot2grid((3,1), (0,0), rowspan=2)
ax2 = plt.subplot2grid((3,1), (2,0))
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果要在创建子图后更改其大小和位置,可以使用set_position方法。
ax1.set_position([0.1,0.1, 0.5, 0.5])
Run Code Online (Sandbox Code Playgroud)
Bu您不需要此来创建您描述的图形。
归档时间: |
|
查看次数: |
16599 次 |
最近记录: |