【问题标题】:pandas plot automatically assigning color to categoriespandas plot自动为类别分配颜色
【发布时间】:2017-01-04 11:43:05
【问题描述】:

我想做一个条形图我的数据框,这样分类列 ('ad') 定义了我的条形图的颜色。 这是我的数据:

"date","shown","clicked","converted","avg_cost_per_click","total_revenue","ad"
2015-10-01,65877,2339,43,0.9,641.62,"ad_group_1"
2015-10-02,65100,2498,38,0.94,756.37,"ad_group_1"
2015-10-03,70658,2313,49,0.86,970.9,"ad_group_2"
2015-10-04,69809,2833,51,1.01,907.39,"ad_group_2"
2015-10-05,68186,2696,41,1,879.45,"ad_group_3"
2015-10-06,66864,2617,46,0.98,746.48,"ad_group_3"
2015-10-07,68227,2390,42,0.94,462.33,"ad_group_4"
2015-10-08,68520,2909,46,1.07,441.28,"ad_group_4"
2015-10-09,67250,2385,49,0.88,602.14,"ad_group_5"

我有多达 40 个广告组。

我的代码:

columns=['date','converted','clicked','ad']
df2=pd.DataFrame(df,columns=columns)
df2.set_index(df2.date,inplace=True)

这里我只取 1 列(“点击”)来绘制“日期”

plt.figure()
df2.loc[:,['clicked','ad']].plot(kind='bar')
plt.show()
#df2.loc[:,['clicked','ad']].plot(kind='bar',colormap='ad')

colormap 的代码行不起作用,因为我没有颜色列表。 我已经看到用户手动创建类别到颜色的颜色映射的答案。我有 40 多个类别,无法手动完成。

有什么方法可以将“ad”列的不同值设置为自动分配颜色?

寻找这样的东西:

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    您可以获得ad 列中存在的每个组的不同颜色,如图所示:

    df.set_index(['date'],inplace=True) 
    
    # Empty list to append later
    grouped_list = []
    label_list = []
    
    # Iterating through each group key grouped by ad
    for label, key in df.groupby(['ad'])['clicked']:
        grouped_list.append(key)
        label_list.append(label)
    
    # Concatenating the grouped list column-wise and filling Nans with 0's 
    df_grouped_bar = pd.concat(grouped_list, axis=1).fillna(0)
    
    # Renaming columns created to take on new names
    df_grouped_bar.columns = label_list
    
    # Bar plot with a chosen colormap
    ax = df_grouped_bar.plot(kind='bar', stacked=True, figsize=(6,6), 
                             width=0.2, ylim=(0,5000), cmap=plt.cm.rainbow)
    # Figure Aesthetics
    ax.set_xticklabels(df_grouped_bar.index.format())
    plt.ylabel('clicked')
    plt.tight_layout()
    plt.show()
    

    【讨论】:

    • 如果我有同一天的广告组,条形图会像我想要的那样堆叠吗?
    • 是的。假设您在同一日期拥有ad_group_5ad_group_1,它们将以其各自的组颜色堆叠在一起,并且不要忘记相应地设置ylim
    • 标签和键值分别代表什么?
    • label 代表分组对象的名称(ad_group_1→ad_group_5),而 key 是与这些名称对应的实际组。您可以添加一些 print 语句并自己检查一下。
    猜你喜欢
    • 2013-09-24
    • 2021-06-25
    • 1970-01-01
    • 2023-01-10
    • 2017-04-02
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多