首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在熊猫图中按类别着色

在熊猫图中按类别着色
EN

Stack Overflow用户
提问于 2019-06-13 03:49:42
回答 2查看 76关注 0票数 0

在一个名为cont_col的列和一个category列中,我有一个包含累积和的连续数字的DataFrame:

代码语言:javascript
复制
import pandas as pd
import numpy as np

cont = np.random.rand(100)

df = pd.DataFrame(data=cont)

df = df.sort_values(by=0)

df['quartile'] = pd.qcut(df[0], 4, labels=False)

cumsum = df[0].cumsum()
cumsum = cumsum.to_frame()
cumsum[0].plot(kind='bar', color='k')

我想绘制相同的数据,但这一次是由四分位数列着色的。

我可以用下面的代码做到这一点:

代码语言:javascript
复制
def colourise(x):
    if x == 0:
        return 'k'
    elif x == 1:
        return 'r'
    elif x == 2:
        return 'g'
    else:
        return 'b'

df['colour'] = df['quartile'].apply(colourise)
cumsum = df[0].cumsum()
cumsum = cumsum.to_frame()
cumsum[0].plot(kind='bar', color=df['colour'].tolist())

我只是想知道是否有一种更通用的方法-特别是一种不依赖于我创建的qtile数量的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-13 04:39:40

如果您不是特别关心颜色,请使用其中一个海运调色板创建一个映射。这样,您只需要指定列,而不是类别或颜色的数量。如果您有许多有序的类别,请考虑切换到顺序调色板。

代码语言:javascript
复制
import seaborn as sns
import matplotlib.pyplot as plt

def map_color(df, col):
    color_d = dict(zip(df[col].unique(), sns.color_palette("hls", df[col].nunique())))
    df['color'] = df[col].map(color_d)
    return df

df  = map_color(df, 'quartile')

fig, ax = plt.subplots(figsize=(10, 5))
df.assign(y=df[0].cumsum()).plot(kind='bar', y='y', ax=ax, color=df.color.tolist(),
                                 legend=False)
plt.show()

票数 1
EN

Stack Overflow用户

发布于 2019-06-13 04:24:02

您可以定义颜色映射的字典。

代码语言:javascript
复制
color_map = {
    0:'k',
    1:'r',
    2:'g'
}

然后,使用.map()

代码语言:javascript
复制
df['colour'] = df['quartile'].map(color_map).fillna('b')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56569458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档