python - Matplotlib:根据标准识别条形图中的条形

标签 python pandas matplotlib bar-chart

代码如下:

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

给出以下输出:

enter image description here

我想为数量最多的两种水果(即橙子和香蕉)绘制红色条形。我怎样才能做到这一点?我希望我的绘图足够强大,能够识别顶部的两个条形,而不是给出固定的阈值来改变颜色。

最佳答案

可能有一种直接且更简单的方法,但我能够提出以下解决方案,原则上该解决方案适用于任意数量的前 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()

enter image description here

关于python - Matplotlib:根据标准识别条形图中的条形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54444349/

相关文章:

python - 谷歌应用引擎: How to Truncate string after a given number of chars

Python - 按长度打印单词

python-3.x - Pandas 按范围合并 ip 地址上的数据帧

python - 为什么 pandas dataframe 消耗的 RAM 比原始文本文件的大小多得多?

python - 如何在 matplotlib 图例中放置多个颜色图 block ?

python - 正确使用 Matplotlib 的 pick 事件

python - 使用 pymongo 3.0 从 mongo 聚合中获取结果

python - 使用scrapy,python中的站点地图蜘蛛解析站点地图中具有不同url格式的url

python - Pandas 从多个分组操作中创建新的数据框

python - 使用 imshow 校正轴