【问题标题】:Stack Bar Plot with Numbers带数字的堆叠条图
【发布时间】:2019-07-22 11:01:16
【问题描述】:

我正在尝试使用 matplotlib 用堆栈栏绘制一些数据。

我写了一段代码,不用数字也能完美运行;

import numpy as np
import matplotlib.pyplot as plt

N = 5
menMeans = [20, 35, 30, 35, 27]
womenMeans = [25, 32, 34, 20, 25]
ind = np.arange(N)
width = 0.35

p1 = plt.bar(ind, menMeans, width, color='#d62728')
p2 = plt.bar(ind, womenMeans, width, bottom=menMeans)

plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('Men', 'Women'))

plt.show()

这就是图表的图片

但我想在它们中间显示每个条的数字,如下所示:

我试图像这样编辑我的代码;

import numpy as np
import matplotlib.pyplot as plt

N = 5
menMeans = [20, 35, 30, 35, 27]
womenMeans = [25, 32, 34, 20, 25]
ind = np.arange(N)
width = 0.35

p1 = plt.bar(ind, menMeans, width, color='#d62728')
p2 = plt.bar(ind, womenMeans, width, bottom=menMeans)

plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('Men', 'Women'))
for index, data in enumerate(menMeans):
    plt.text(x=index, y=data + 1, s=f"{data}", fontdict=dict(fontsize=20))
for index, data in enumerate(womenMeans):
    plt.text(x=index, y=data + 1, s=f"{data}", fontdict=dict(fontsize=20))
plt.show()

但它是这样显示的

我的错在哪里?可以修吗?

【问题讨论】:

  • @eyllanesc 感谢您的编辑,但我在任何地方都没有找到如何添加这种格式的图片。我该怎么办?
  • 你必须有一个最低声望,这样当图片显示出来,否则它们只会被放置为链接,你只需要等待。

标签: python python-3.x numpy matplotlib plot


【解决方案1】:

您需要设置horizontalalignment='center'verticalalignment='center',然后使用正确的y 偏移值。这是一种方法。您也可以使用短格式,如hava

for index, data in enumerate(menMeans):
    plt.text(x=index, y=data/2, s=f"{data}", ha='center',
             va='center', fontsize=20)
    plt.text(x=index, y=data + (womenMeans[index]/2), s=f"{womenMeans[index]}", ha='center',
             va='center',fontsize=20)
plt.show()

编辑:回答您的第二个问题,添加以下行,这将为您提供下图

plt.text(x=index, y=data + womenMeans[index]+1, s=f"{data+womenMeans[index]}", 
         ha='center',fontsize=20)

【讨论】:

  • 完美运行,谢谢。但我还有 1 个问题。如果我想在栏的顶部显示每列的总和(例如 20+25 = 45 = 总和),我该如何添加这一行?
  • @Wicaledon :检查编辑后的答案。我为您的第二个问题添加了解决方案
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 2016-03-11
  • 2020-10-06
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多