两个子图太长(长度)
Two subplots coming out too long (length)
我正在尝试使用 matplotlib.pyplot.subplots
绘制两个条形图。我在一个函数中创建了子图,但是当我输出子图时,它们的高度太长而宽度不够长。
这是我写的函数:
def corr_bar(data1, data2, method='pearson'):
# Basic configuration.
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(7, 7))
ax1, ax2 = axes
corr_matrix1 = data1.corr(method=method)
corr_matrix2 = data2.corr(method=method)
cmap = cm.get_cmap('coolwarm')
major_ticks = np.arange(0, 1.1, 0.1)
minor_ticks = np.arange(0, 1.1, 0.05)
# Values for plotting.
x1 = corr_matrix1['price'].sort_values(ascending=False).index
x2 = corr_matrix2['price'].sort_values(ascending=False).index
values1 = corr_matrix1['price'].sort_values(ascending=False).values
values2 = corr_matrix2['price'].sort_values(ascending=False).values
im1 = ax1.bar(x1, values1, color=cmap(values1))
im2 = ax2.bar(x2, values2, color=cmap(values2))
# Formatting for plot 1.
ax1.set_yticks(major_ticks)
ax1.set_yticks(minor_ticks, minor=True)
plt.setp(ax1.get_xticklabels(), rotation=45, ha='right', rotation_mode='anchor')
ax1.grid(which='both')
ax1.grid(which='minor', alpha=0.4)
ax1.grid(which='major', alpha=0.7)
ax1.xaxis.grid(False)
# Formatting for plot 2.
ax2.set_yticks(major_ticks)
ax2.set_yticks(minor_ticks, minor=True)
plt.setp(ax2.get_xticklabels(), rotation=45, ha='right', rotation_mode='anchor')
ax2.grid(which='both')
ax2.grid(which='minor', alpha=0.4)
ax2.grid(which='major', alpha=0.7)
ax2.xaxis.grid(False)
fig.tight_layout()
plt.show()
此函数(当 运行 有两个 Pandas 数据帧时)输出如下图像:
为了更好地描绘我的困境,我特意捕捉了图像右侧的空白。我想要的是适当调整条形图的高度和宽度,以占据整个 space,而不是拉长并向左推。
我尝试使用 ax.set(aspect='equal')
方法,但它 "scrunches up" 条形图。有人会碰巧知道我可以做些什么来解决这个问题吗?
谢谢。
当您定义 figsize=(7,7)
时,您设置的是整个图形的大小,而不是子图。所以在这种情况下你的整个图形必须是一个正方形。您应该将其更改为 figsize=(14,7)
或使用大于 14 的数字来获得一点额外的 space。
我正在尝试使用 matplotlib.pyplot.subplots
绘制两个条形图。我在一个函数中创建了子图,但是当我输出子图时,它们的高度太长而宽度不够长。
这是我写的函数:
def corr_bar(data1, data2, method='pearson'):
# Basic configuration.
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(7, 7))
ax1, ax2 = axes
corr_matrix1 = data1.corr(method=method)
corr_matrix2 = data2.corr(method=method)
cmap = cm.get_cmap('coolwarm')
major_ticks = np.arange(0, 1.1, 0.1)
minor_ticks = np.arange(0, 1.1, 0.05)
# Values for plotting.
x1 = corr_matrix1['price'].sort_values(ascending=False).index
x2 = corr_matrix2['price'].sort_values(ascending=False).index
values1 = corr_matrix1['price'].sort_values(ascending=False).values
values2 = corr_matrix2['price'].sort_values(ascending=False).values
im1 = ax1.bar(x1, values1, color=cmap(values1))
im2 = ax2.bar(x2, values2, color=cmap(values2))
# Formatting for plot 1.
ax1.set_yticks(major_ticks)
ax1.set_yticks(minor_ticks, minor=True)
plt.setp(ax1.get_xticklabels(), rotation=45, ha='right', rotation_mode='anchor')
ax1.grid(which='both')
ax1.grid(which='minor', alpha=0.4)
ax1.grid(which='major', alpha=0.7)
ax1.xaxis.grid(False)
# Formatting for plot 2.
ax2.set_yticks(major_ticks)
ax2.set_yticks(minor_ticks, minor=True)
plt.setp(ax2.get_xticklabels(), rotation=45, ha='right', rotation_mode='anchor')
ax2.grid(which='both')
ax2.grid(which='minor', alpha=0.4)
ax2.grid(which='major', alpha=0.7)
ax2.xaxis.grid(False)
fig.tight_layout()
plt.show()
此函数(当 运行 有两个 Pandas 数据帧时)输出如下图像:
为了更好地描绘我的困境,我特意捕捉了图像右侧的空白。我想要的是适当调整条形图的高度和宽度,以占据整个 space,而不是拉长并向左推。
我尝试使用 ax.set(aspect='equal')
方法,但它 "scrunches up" 条形图。有人会碰巧知道我可以做些什么来解决这个问题吗?
谢谢。
当您定义 figsize=(7,7)
时,您设置的是整个图形的大小,而不是子图。所以在这种情况下你的整个图形必须是一个正方形。您应该将其更改为 figsize=(14,7)
或使用大于 14 的数字来获得一点额外的 space。