代码如下:
import pandas as pd
import matplotlib.pyplot as plt
data = [['Apple',10],['Banana',15],['Kiwi',11],['Orange',17]]
df = pd.DataFrame(data,columns=['Fruit','Quantity'])
df.set_index('Fruit', inplace=True)
df.plot.bar(color='gray',rot=0)
plt.show()
给出以下输出:
我想为数量最多的两种水果(即橙子和香蕉)绘制红色条形。我怎样才能做到这一点?我希望我的绘图足够强大,能够识别顶部的两个条形,而不是给出固定的阈值来改变颜色。
最佳答案
可能有一种直接且更简单的方法,但我能够提出以下解决方案,原则上该解决方案适用于任意数量的前 n
值。想法是:
- 首先使用
nlargest
从 DataFrame 中获取前n
个元素(下例中的n=2
) - 然后,循环遍历 x-tick 标签,并使用
if
语句更改最大值的色 block (条形)颜色以获取其索引。在这里,我们创建了一个轴实例ax
,以便能够提取用于设置颜色的色 block 。
import pandas as pd
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
data = [['Apple',10],['Banana',15],['Kiwi',11],['Orange',17]]
df = pd.DataFrame(data,columns=['Fruit','Quantity'])
df.set_index('Fruit', inplace=True)
df.plot.bar(color='gray',rot=0, ax=ax)
top = df['Quantity'].nlargest(2).keys() # Top 2 values here
for i, tick in enumerate(ax.get_xticklabels()):
if tick.get_text() in top:
ax.patches[i].set_color('r')
plt.show()
关于python - Matplotlib:根据标准识别条形图中的条形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54444349/