基于valu的彩色matplotlib条形图

2024-03-29 13:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

- values below -0.5: red
- values between -0.5 to 0: green
- values between 0 to 08: blue
- etc

我发现了一些基本的条形图着色的例子,但是没有什么可以满足值范围的要求,比如上面的例子。

更新:

谢谢你的建议。根据您的示例,当两个轴都是数字时,这非常有用。但是在我的例子中,我的原始数据结构是一个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轴。每个单元格值都是一个条形图。最后,按照原来的问题给这些条上色。谢谢


Tags: to数据方法etc绘制数字greenblue
1条回答
网友
1楼 · 发布于 2024-03-29 13:30:37

您可以对数据集使用掩码。一个基本的例子可以是:

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

代码简要说明:

  • 我为我的红色列创建了一个掩码
  • 我创建一个颜色数组
  • 更改颜色数组,以便对我的蒙版值使用其他颜色
  • 由于dfstacked数据帧有一个MultiIndex记号打印不好,所以我使用rot关键字旋转它们。如果你想使它自动化,以便得到一个好的绘图,你可以在plt.tight_layout()之前使用plt.show()

我希望有帮助。

相关问题 更多 >