【问题标题】:Assign specifc colour for each values of categorial variable python为分类变量python的每个值分配特定颜色
【发布时间】:2019-03-21 14:49:54
【问题描述】:

我有 3 列的数据框,例如:

>  A        B    C 
  red     yes   100
  red     no     25
  blue    yes   200
  blue    no     20
  green   yes    40
  green   no     10
  yellow  yes    40
  yellow  no     20

我想在 A 列的 B 列中为每个答案制作一个饼图,并在该部分给出与它分配的标签相同的颜色。

例如,我希望饼图上的部分在红色标签上分配红色,蓝色代表蓝色等。 有时标签不能是颜色,但我想选择在该标签上分配的颜色。

预期输出

我试过这段代码:

import pandas as pd
import matplotlib.pyplot as plt

df_bis = df.groupby(['A','B'], axis = 0).agg('count') 

df_bis['C'].plot(kind='pie',
                    figsize=(5,4),
                    subplots=True,
                    autopct='%1.1f%%', # add in percentages
                    startangle=90,     # start angle 90° 
                    shadow=True,       # add shadow         
                    colors = 
                 {'red':"red",'blue':"blue",'yellow':"gold",'green':"green"}

                       )                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
             plt.axis('equal') # Sets the pie chart to look like a circle.

但它不起作用。

你有想法吗? 谢谢

【问题讨论】:

    标签: python pandas charts colors


    【解决方案1】:

    在这里,试试这个:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    data_frame = pd.read_csv("test.csv")
    
    df_yes = data_frame.loc[data_frame['B']=='yes',:]
    df_no = data_frame.loc[data_frame['B']=='no',:]
    fig, (ax1, ax2) = plt.subplots(1, 2)
    
    # plot each pie chart in a separate subplot
    ax1.pie(df_yes["C"],  labels=df_yes["A"], autopct='%1.1f%%',
            shadow=True, colors=df_yes["A"])
    ax1.set_title('Yes')
    
    ax2.pie(df_no["C"],  labels=df_no["A"], autopct='%1.1f%%',
            shadow=True, colors=df_no["A"])
    ax2.set_title('No')
    
    plt.show()
    


    测试 CSV 如下所示:

    结果看起来像:

    注意:您可以调整图形(使用文本颜色、图形大小、图表样式等)并根据您的要求添加图例。我没有添加图例,我在饼图上留下了标签。

    您可以删除标签 (labels=df_yes["A"]) 并将以下代码添加到每个图表以生成图例:

    ax1.legend(labels=df_yes["A"], loc="upper center")
    

    【讨论】:

    • 感谢您回答@webDev。但是就像我在帖子上写的那样,您可以在 A 列上拥有一个不能是颜色的项目,因此代码 'colors = df_yes["A"]' 将不起作用,因为该项目不是颜色。我搜索一个为每个项目分配不同颜色的平均值。
    【解决方案2】:

    colors 需要像列表一样,其中每个元素都是与一块饼相关联的颜色。使用您的字典,您可以将colors 设置为:

    color_dict = {'red':"red",'blue':"blue",'yellow':"gold",'green':"green"}
    df_bis['C'].plot(kind='pie',
        ...
        colors=[color_dict[c] for c in df_bis['A']]
    )
    ...
    

    【讨论】:

    • 感谢@busybear 很多它的工作。我只有最后一个问题。如何提高饼图的大小和 2 个图表之间的空间?非常感谢
    • 很高兴听到它有效!饼图只会填充它所在的轴。如果您想调整轴之间的间距(饼图)this 可能会很有用。要更改整个图形大小,请参阅此post
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2017-10-28
    • 2019-11-12
    • 2015-08-27
    • 1970-01-01
    • 2011-10-18
    相关资源
    最近更新 更多