【问题标题】:Stacked bar chart is cut off at the edges堆积条形图在边缘被切断
【发布时间】:2020-02-05 18:02:57
【问题描述】:

我通过 Pandas 创建了一个堆积条形图,第一个和最后一个条形图位于图的边缘。他们被切断了。

我想要得到的图是一个堆积条形图和一个 2 y 轴的折线图。条形层的值应该显示在层中。

我创建了一个pd.DataFrame,其中包含以下内容:

       1.0  1.3  1.7  2.0   2.3   2.7   3.0  3.3  3.7   4.0   5.0
SS 15  2.0  0.0  1.0  1.0   4.0   8.0   5.0  6.0  6.0  10.0  19.0
SS 16  1.0  1.0  5.0  2.0  11.0  16.0  11.0  8.0  7.0   6.0  12.0
SS 17  1.0  5.0  3.0  3.0   5.0   6.0   5.0  9.0  8.0   9.0  13.0

每一行 (SS 15-SS 17) 应该是一个堆叠的条形图,其中值是条形图的一层。 折线图只包含 3 个点,应该用一条线连接。

我用来绘制的代码是:

fig, ax1 = plt.subplots()
ax1 = df.plot(kind='bar',
              stacked=True,
              figsize=(20,15), 
              fontsize=20, 
              grid=True, 
              rot=45, 
              align='center', 
              edgecolor='#000000', 
              colormap='Paired')
ax2 = ax1.twinx()
ax1.set_xlabel('X-LABEL', fontsize=25)
ax1.set_ylabel('1st Y-LABLE', fontsize=25)
ax1.set_title(name, fontsize=35)
ax1.legend(fontsize=15, loc='upper left')
ax1.grid(True, axis='y')
df2 = pd.DataFrame(medi) #medi is just a dict with 3 pais
df2.plot(ax=ax2, 
         color='red', 
         marker='o',
         linewidth='2', 
         fontsize=20)
ax2.legend(["2nd LEGEND"], fontsize=15, loc='upper right')
ax2.set_ylim(1,5)
ax2.set_ylabel('2nd Y-LABEL', fontsize=25)
ax2.grid(True,axis='y')

这会导致:

如您所见,第一个和最后一个条正好位于图表的边缘并被截断。我试图覆盖xticks,但没有成功。

我遇到的第二个问题是在条形图中显示值。我找到了解决方案here,但是却导致报错:

AttributeError: 'NoneType' object has no attribute 'update'

【问题讨论】:

  • align='edge'?
  • 你应该把你的第二个问题放在另一个问题中。
  • 考虑为第二个问题打开另一个问题,但因为它不是那么重要,所以我也把它放在这里。下次会打开 2 个问题。

标签: python pandas matplotlib plot


【解决方案1】:

我找到了解决办法。

我通过matplotlib 创建了堆叠条,效果很好。

我不知道为什么图表会被pandas 截断,但它可以工作。

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2021-12-30
    • 2020-12-05
    • 2017-02-26
    相关资源
    最近更新 更多