【问题标题】:Issues in displaying negative values on bar chart in Matplotlib在 Matplotlib 中的条形图上显示负值的问题
【发布时间】:2019-06-03 19:07:21
【问题描述】:

我正在尝试使用 Matplotlib 创建一个包含正值和负值的条形图,并且在将负值显示在 Y 轴上时遇到了困难。运行代码时,它将正确显示所有正值(以红色标记),但根本不显示负值。 相反,我得到了标记为“y1”的字符串的正值的重复。请参阅附图 1 和下面的代码。

我使用的代码是:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.pyplot import figure

data = pd.read_csv("C:\samplefile.csv")
fig = plt.figure()
figure(figsize = (22,3))
ax = plt.subplot(111)
x = data['Timing Event']
y = data['Diff Latency'].diff(periods = 1) > 0
y1 = data['Diff Latency'].diff(periods = 1) < 0
y_pos = np.arange(len(x))
plt.bar(y_pos, y, color=(1.0, 0, 0, 0.7))
plt.bar(y_pos, y1, color=(0, 0.6, 0, 0.7))

plt.tight_layout()
plt.show()

数据集有 2 列 Timing Event 数字,例如(0,1,2,3....),用作索引和“Diff Latency”,它有负值和正值。示例数据集附在下面:

Timing Event    Diff Latency
     0               -4
     1                3
     2                1
     3               -1
     4                2

【问题讨论】:

  • 您的预期结果如何?
  • 您好 gmds,预期结果看起来像所附图像(上面的图像 1 链接),但是绿色列应显示在轴的负侧。我可以在字符串 y 上生成负值,但颜色会是红色,最终用户无法从视觉上分辨出差异。
  • 您绘制的不是负值而是布尔值。 plt.bar(y_pos, -1 * y1, color=(0, 0.6, 0, 0.7))是你想要的吗?

标签: python matplotlib


【解决方案1】:

如果你只是想用不同颜色的条来绘制正负值,你可以直接使用pandas plots,基于here所示的方法

import pandas as pd
import matplotlib.pyplot as plt 

fig, ax = plt.subplots()

data = pd.DataFrame({'Timing_Event':[0,1,2,3,4], 'Diff_Latency':[-4, 3, 1, -1, 2]})
data['sign'] = data['Diff_Latency'] > 0

data['Diff_Latency'].plot(kind='bar', color=data.sign.map({True: (1.0, 0, 0, 0.7), False: (0, 0.6, 0, 0.7)}), 
                      ax=ax)
ax.axhline(0, color='k')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2012-02-19
    • 2015-10-11
    • 2018-05-08
    相关资源
    最近更新 更多