来自pandas dataframe python的barh图中行的不同颜色

Posted

技术标签:

【中文标题】来自pandas dataframe python的barh图中行的不同颜色【英文标题】:different colors for rows in barh chart from pandas dataframe python 【发布时间】:2016-09-23 15:26:33 【问题描述】:

我有以下熊猫数据框:

              a   b
    bob      23  25
    john     13  21
    paul     20  19
    david    17  14
    michael  14  24
    neil     22  11 

    df.plot(kind='barh')

我使用了熊猫绘图功能。 我想制作一个所有行(名称)具有不同颜色的条形图有没有办法做到这一点?

我需要每个人都有不同的颜色条。

【问题讨论】:

感谢您提供一个简单的示例。如果我们可以复制并粘贴代码以生成 DataFrame,那就更好了。您还应该包括用于创建条形图的代码行。 谢谢。我已将代码添加到代码块中。 【参考方案1】:

Pandas 似乎只支持使用 colormap 属性,它将相同的地图应用于图表中的每一行,例如:

df.plot(kind='barh', colormap='RdBu')

出于您的目的,您需要直接使用 Matplotlib。

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame('a':[23, 13, 20, 17, 14, 22],
                   'b':[25, 21, 19, 14, 23, 11],
                   index=['bob', 'john', 'paul', 'david', 'michael', 'neil'])

a_vals = df.a
b_vals = df.b
ind = np.arange(df.shape[0])
width = 0.35

# Set the colors
colors = ['b', 'g', 'r', 'c', 'm', 'y', 'g']


def autolabel(bars):
    # attach some text labels
    for bar in bars:
        width = bar.get_width()
        ax.text(width*0.95, bar.get_y() + bar.get_height()/2,
                '%d' % int(width),
                ha='right', va='center')

# make the plots
fig, ax = plt.subplots()
a = ax.barh(ind, a_vals, width, color = colors) # plot a vals
b = ax.barh(ind + width, b_vals, width, color = colors, alpha=0.5)  # plot b vals
ax.set_yticks(ind + width)  # position axis ticks
ax.set_yticklabels(df.index)  # set them to the names
ax.legend((a[0], b[0]), ['a', 'b'], loc='center right')

autolabel(a)
autolabel(b)

plt.show()

请参考以下示例:

1 - matplotlib bar charts

2-changing individual colors on bar chart

【讨论】:

谢谢你,安德鲁。输出正是我正在寻找的。但是,我得到一个 AttributeError 说 'DataFrame' 对象没有属性 'shap'。 我将 shap 更改为 shape 并且它有效。非常感谢!! @michAmir 哎呀。很高兴你抓住了它。我在示例中修复了它。 很抱歉再次打扰您。我试图从每个栏显示右侧的值。但我正在努力解决它。你能再帮帮我吗? 您可以通过我上面发布的“Matlab 条形图”链接中的autolablel() 逆向工程轻松地做到这一点。看看我如何更改我在上面的代码中发布的版本。只需将上下文旋转 90 度即可。

以上是关于来自pandas dataframe python的barh图中行的不同颜色的主要内容,如果未能解决你的问题,请参考以下文章

python 连接Pandas DataFrames(来自http://pandas.pydata.org/pandas-docs/stable/merging.html)

Python-requests POST JSON 格式的文本字符串,使用来自 Pandas DataFrame 的数据,循环通过 DataFrame 记录

来自pandas dataframe python的barh图中行的不同颜色

python 来自Pandas DataFrame的示例(来自http://stackoverflow.com/questions/15923826/random-row-selection-in-p

我需要从 pandas DataFrame 对象中创建一个 python 列表对象或任何对象,对来自不同行的值进行分组

python 使用“is in”切片Pandas DataFrame(来自http://stackoverflow.com/questions/12096252/use-a-list-of-value