gpt4 book ai didi

python - 基于值的彩色matplotlib条形图

转载 作者:太空狗 更新时间:2023-10-29 22:06:35 24 4
gpt4 key购买 nike

有没有一种方法可以根据条形图的值为条形图的条形着色。例如:

- 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()

结果应该是: enter image description here

更新:

当您更新问题时,我会更新代码。对于您的简单案例,如果我理解正确,您可以执行以下(丑陋的)黑客攻击:

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()

或者使用更多OO solution .

代码简要说明:

  • 我为我的红色柱子创建了一个 mask
  • 我创建了一组颜色
  • 更改颜色数组以便为我的屏蔽值使用其他颜色
  • 由于 dfstacked 数据框有一个 MultiIndex,所以刻度没有很好地打印,所以我使用 rot 关键字来旋转它们。如果你想自动化它以获得一个漂亮的情节,你可以在 plt.show() 之前使用 plt.tight_layout()

希望对你有帮助。

关于python - 基于值的彩色matplotlib条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33476401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com