Python 在一个循环中绘制的子地块图表非常紧凑

Python 在一个循环中绘制的子地块图表非常紧凑,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我有一个大约120个功能的数据框架,我想每年检查一次。我正在绘制每个要素,x=年,y=循环中的要素值。虽然这些绘图成功,但由于图表完全被压扁,因此难以辨认 我尝试过使用plt.tight_layout()并使用plt.rcParams['figure.figsize']调整体形大小,但遗憾的是没有效果 for i in range(len(roll_df.columns)): plt.subplot(len(roll_df.columns), 1, i+1) name = roll_df

我有一个大约120个功能的数据框架,我想每年检查一次。我正在绘制每个要素,x=年,y=循环中的要素值。虽然这些绘图成功,但由于图表完全被压扁,因此难以辨认

我尝试过使用plt.tight_layout()并使用plt.rcParams['figure.figsize']调整体形大小,但遗憾的是没有效果

for i in range(len(roll_df.columns)):
  plt.subplot(len(roll_df.columns), 1, i+1)
  name = roll_df.columns[i]
  plt.plot(roll_df[name])
  plt.title(name, y=0)
  plt.yticks([])
  plt.xticks([])
  plt.tight_layout()
  plt.show()
循环运行,但所有绘图在y轴上挤压得难以辨认:


Matplotlib不会自动调整图形的大小。因此,如果在彼此下方添加更多子地块,它将分割可用空间,而不是扩展图形。这就是y轴如此窄的原因

您可以尝试预先定义地物大小,或根据您拥有的子地块数量确定地物大小:

n_plots = roll_df.shape[1]
fig, axes = plt.subplots(n_plots, 1, figsize=(8, 4 * n_plots), tight_layout=True)

# Then your usual part, but plot on the created axes
for i in range(n_plots):
  name = roll_df.columns[i]
  axes[i].plot(roll_df[name])
  axes[i].title(name, y=0)
  axes[i].yticks([])
  axes[i].xticks([])

plt.show()

如果有多行,则需要使地物的高度取决于行数。如果你有多列,你需要让数字的宽度取决于这个数字。哦,是的,把w和h混在一起,很匆忙。现在修好了。现在我看到了——有点违反直觉,数组是索引的(行、列),而figsize是(宽度、高度)。一般来说,x是水平的,y是垂直的,x是第一位的(比如
plt.plot(x,y)
)。为了让数组的水平维度表示x,数组的第一个维度必须是y,这对于保持与python列表的相似性也很有用(
array[i,j]==list[i][j]
)。对我来说不直观的是
子批(nrows,nrows)
不是
子批(nrows,nrows)
;不幸的是,这引发了多个错误(我已修复了第一个错误):“1。Int对象不可存储,因此应该在范围内(len(roll_df.columns)),但现在面对的“text”对象不可调用?请尝试使用
范围(df.shape[1])
。形状输出
(行数、列数)
因此形状[1]是您拥有的列数。要获得名称,可以使用
df.columns[i]