有没有一种方法可以根据条形图的颜色为条形图的条形着色。例如:
- values below -0.5: red
- values between -0.5 to 0: green
- values between 0 to 08: blue
- etc
我已经找到了一些条形着色的基本示例,但没有任何一个可以满足值范围,例如上述示例。
更新:
谢谢kikocorreoso的建议。当您的示例中两个轴都是数字时,这非常有用。但是,就我而言,我的原始数据结构是pandas数据框。然后,我使用df.stack()并绘制结果。这意味着数据框的行/列成为图的x轴,数据框的单元格为Y轴(条形)。
我已经按照您的示例尝试过遮罩,但是当Y轴是数字而X轴是名称时,它似乎不起作用。例如:
col1 col2 col3 col4
row1 1 2 3 4
row2 5 6 7 8
row3 9 10 11 12
row4 13 14 15 16
上面的数据帧需要绘制为条形图,其中行/列组合形成x轴。每个单元格值将是一个条形图。最终,按照原始问题为条形着色。谢谢
您可以对数据集使用掩码。一个基本的示例如下:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.arange(10) * 0.1
mask1 = y < 0.5
mask2 = y >= 0.5
plt.bar(x[mask1], y[mask1], color = 'red')
plt.bar(x[mask2], y[mask2], color = 'blue')
plt.show()
更新:
当您更新问题时,我会更新代码。对于您的简单情况,如果我理解正确,则可以进行以下(丑陋的)破解:
import pandas as pd
df = pd.DataFrame({'col1':[1,2,3], 'col2':[4,5,6]},
index = ['row1','row2','row3'])
dfstacked = df.stack()
mask = dfstacked <= 3
colors = np.array(['b']*len(dfstacked))
colors[mask.values] = 'r'
dfstacked.plot(kind = 'bar', rot = 45, color = colors)
plt.show()
或使用更多面向对象的解决方案。
该代码简要说明:
dfstacked
数据框具有MultiIndex
刻度,因此刻度没有很好地打印,因此我使用rot
关键字旋转刻度。如果要使其自动化以获取良好的绘图,则可以使用plt.tight_layout()
before plt.show()
。希望对您有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句