我正在尝试使用Matplotlib和Seaborn进行一些绘图。我希望y的滴答度从0变为1。如您在屏幕截图中所见,这些图正在重新缩放,这使得它们在视觉上难以比较。如何强制每个图的y刻度从0到1?
category_types = list(preds_df['category'].value_counts().keys())
fig = plt.figure(figsize=(12, 18))
fig.subplots_adjust(hspace=0.3,wspace=0.3,left=0,right=1,bottom=0, top=1)
Npicture = 6
count = 1
for irow in range(Npicture):
ax = fig.add_subplot(3, 2, count,xticks=[],yticks=[])
ax.set_title(category_types[count-1])
plt.yticks(np.arange(0, 1, step=0.1))
sns.boxplot(ax=ax, x="variable", y="value", data=pd.melt(preds_df[preds_df['category'] == category_types[count-1]][labels]))
count += 1
plt.show()
答案 0 :(得分:0)
如果有人遇到相同的问题,我将回答我自己的问题。事实证明,如果您交换线路
plt.yticks(np.arange(0, 1, step=0.1))
sns.boxplot(ax=ax, x="variable", y="value", data=pd.melt(preds_df[preds_df['category'] == category_types[count-1]][labels]))
因此代码变为
sns.boxplot(ax=ax, x="variable", y="value", data=pd.melt(preds_df[preds_df['category'] == category_types[count-1]][labels]))
plt.yticks(np.arange(0, 1.1, step=0.1))
请注意,我还将plt.yticks()中的第二个参数从1更改为1.1。保留为1会使轴停止在0.9。
更新 正如@ user2357112指出的那样。 np.linspace()比np.arange()是更好的方法。因此该行应实际显示为:
plt.yticks(np.linspace(0, 1, 11))