我有一个带有两个子图的matplotlib图,一个在另一个之上。 我正在制作一组类似的数字,但只想在第一组中的轴,标签,标题等。 我想将这些插入到彼此相邻的文档中,以便子图像全部排列并且大小相同。
我遇到的问题是当我关闭网格,轴,颜色条等时,子图中的图像会扩展以填充之前由文本/刻度占据的空间。
有没有办法删除我的轴标签,但保持图像大小相同(例如,可能是因为matplotlib'认为'那里有东西,但显示它)?我尝试使用
插入空标题plt.xlabel('')
但这不起作用,并且没有类似的替换轴的方法。 或者,我可以指定子图的大小和位置,使其图像固定,无论它们是否有轴。
当变量'colorbar'和'grid'设置为'off'时,我希望图像保持不变,而不是变大以填充空白区域。
示例代码:
import numpy as np
import matplotlib.pyplot as plt
filename = 'outputimage.png'
grid = 'on'
colorbar = 'on'
r = np.linspace(0,1.0,11)
z = np.linspace(0,1.0,11)
data1 = np.zeros([10,10])
data2 = np.zeros([10,10])
for i in range(10):
for j in range(10):
data1[i,j] = r[i]*z[j]
data2[i,j] = -r[i]*z[j]
R, Z = np.meshgrid(r, z)
fig = plt.figure(1,facecolor="white",figsize=(3.5,10),dpi=200)
plt.subplot(211)
ax = plt.gca()
im11 = ax.pcolormesh(R, Z, data1)
ax.set_aspect('equal',adjustable='box')
if grid == 'on':
plt.axis('on')
plt.xlabel(r'r')
plt.ylabel(r'z')
plt.title('data1')
else:
plt.axis('off')
plt.xlabel(' ')
plt.ylabel(' ')
plt.title(' ')
if colorbar == 'on':
CBI = plt.colorbar(im11, orientation='vertical')
plt.subplot(212)
ax = plt.gca()
im21 = ax.pcolormesh(R, Z, data2)
ax.set_aspect('equal',adjustable='box')
plt.xlabel(r'r')
plt.ylabel(r'z')
plt.axis('off')
if colorbar == 'on':
CB = plt.colorbar(im21, orientation='vertical')
if grid == 'on':
plt.title('data2')
else:
plt.title(' ')
plt.tight_layout(h_pad=2.0)
plt.savefig(filename)
哪个产生: when colorbar and grid set 'on' when colorbar and grid set 'off' 我希望第二个图像与第一个图像完全相同,只是没有颜色条和文本。
注意 - 我正在使用matplotlib2tikz,如果有办法使用它吗?
答案 0 :(得分:2)
您特别要求matplotlib不要通过调用plt.tight_layout()
来保持轴的大小相同。
删除plt.tight_layout()
,您的轴应保持相同的大小,与是否有标签无关。