繁体   English   中英

matplotlib.pyplot 的直方图

[英]Histogram by matplotlib.pyplot

数据表

我想创建直方图来比较总系统成本和批准的总激励。

x = np.arange(7)

y1 = ['Total System Costs']
y2 = ['Total Incentive Approved']

bar_width = 0.3

tick_label = ['2012', '2013', '2014', '2015', '2016', '2017', '2018']
 
plt.bar(x, y1, bar_width, color='salmon', label='Total System Costs')

plt.bar(x + bar_width, y2,bar_width, color='orchid', label='Total Incentive Approved')

plt.legend()

plt.xticks(x + bar_width / 2,tick_label)

plt.show()

我上面的编码有什么问题?

我的结果

你的代码没问题。 问题是matplotlib不知道如何排列 y 轴,因为您的数据不是数字。 所以它将第一个“值”放在 0 处,第二个放在它上面(在 1 处)。 结果是y1 = ['Total System Costs']显示一个高度为零的条形,您无法观察到它。

如果您在轴上调用ax.get_ylim()plt.gca().get_ylim()在您的情况下,因为您没有显式打开轴句柄),您会注意到它返回类似

(0.0, 1.05)如果y1现在代表 0,它解释了为什么你看不到任何东西。

即使扩展 y 轴的限制(比如说plt.gca().set_ylim((-1,1.05)) )也无济于事,因为条形的高度仍然为零(从 0 到 0.. .)。

为了说明这个理论,我在代码中添加了一个带有新 y 值的单行代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(7)

y1 = ['Total System Costs']
y2 = ['Total Incentive Approved']

bar_width = 0.3
plt.bar(0,'zero',bar_width) # <<<<< additional bar plot
plt.bar(x, y1,bar_width, color='salmon', label='Total System Costs')
plt.bar(x + bar_width, y2,bar_width, color='orchid', label='Total Incentive Approved')

plt.legend()
# set tick labels
tick_label = ['2012', '2013', '2014', '2015', '2016', '2017', '2018']
plt.xticks(x + bar_width / 2,tick_label)

plt.show()

酒吧

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM