【问题标题】:How to display bars for 0 value in matplotlib?如何在 matplotlib 中显示 0 值的条形?
【发布时间】:2022-10-24 17:14:48
【问题描述】:

即使为零或接近零,我也试图显示结果的值,但是我无法获得显示值的图。如何让 matplotlib 显示这些情况的栏?我尝试调整图的底部,使其可能显示零值,但条形的长度仍然为零。

import matplotlib.pyplot as plt

results = [0.7, 0, 0.8, 0.85, 0.6]

n_groups = 5
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.25
opacity = 0.8
plt.ylim(top=1.05,bottom=-0.01)

rects1 = plt.bar(index, results, bar_width,
alpha=opacity,
bottom=-0.1)

plt.xlabel('Algorithm')
plt.ylabel('Accuracy')
plt.title('Model Comparison')
plt.xticks(index, ('SVM', 'KNN', 'DT', 'RF', 'oSVC'))
plt.show()

Plot from example code

【问题讨论】:

  • 欢迎来到 SO!您是否考虑将值添加为条形顶部的标签?请查看here 中的示例。
  • 是的,我考虑过这一点。问题在于,对于我的图表,一张图表上最多有 64 个条形图。因此,为值添加文本看起来不太好,最终会有点局促。
  • Matplotlib 不会显示任何高度为 0 的条,我认为这是有道理的。但是,我知道如果您的值像 0.001,它也不会出现。我做对了吗?
  • 我已将图表的底部减少到 -0.01,其想法是允许 Matplotlib 绘制值为零的条形图,因为这应该使它们的长度为 0.01。但是,条形图仍未显示在条形图上。

标签: python matplotlib bar-chart


【解决方案1】:

Matplotlib 不会显示高度为零的条,因为它没有任何高度.但是,如果数据中的条形高度小于其他条形,changing the scale of Y-axis 会有所帮助。

例如,使用对称对数轴缩放,我们可以得到:

重现上图的代码:

import matplotlib.pyplot as plt
import numpy as np 

results = [0.7, 0, 0.8, 0.85, 0.006, 1.0]

n_groups = 6
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.25
opacity = 0.8

rects1 = plt.bar(index, results, bar_width, alpha=opacity, bottom=-0.1)

plt.yscale("symlog")

plt.xlabel('Algorithm')
plt.ylabel('Accuracy')
plt.title('Model Comparison')
plt.xticks(index, ('SVM', "KNN", 'DT', 'RF', 'oSVC', "Random"))
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    相关资源
    最近更新 更多