按特定顺序组织饼图中的颜色?
organizing colors in a pie chart in a specific sequence?
我有一个包含车辆颜色的数据框。它看起来类似于:
paint_color count
0 black 4821
1 blue 2850
2 brown 784
3 custom 755
4 green 887
5 grey 3221
6 orange 144
7 purple 66
8 red 2858
9 silver 4034
10 white 6096
11 yellow 127
我已经导入了 pandas 和 matplotlib.pyplot(作为情节)
我正在绘制一个饼图来显示每种颜色的数量 - 当然我真的很喜欢这些颜色与..颜色相对应..所以我设置了一个颜色字典:
colors = ({'custom': 'black',"black": 'black', "blue": 'blue', "brown":'brown','custom': 'cyan',"green": 'green',"grey":'grey',"orange":'orange',"purple":'purple',"red":'red', "silver":'silver',"white":'gray',"yellow":'yellow'})
然后我开始使用以下代码进行绘图:
df.plot(kind='pie', y='count',figsize=(15,15), fontsize = 14,colors = colors)
但我收到以下错误:
ValueError: Invalid RGBA argument:custom
现在,如果我进行查询,其中我 select 除了自定义值之外的所有值,这些值按照我期望的方式排列(并且工作正常)
我不确定的是 - 错误是因为它不识别“自定义”而产生的吗?正如我一直在阅读此错误,它似乎可能是由不太明显的问题引发的,所以我想知道这是否是我面临的问题?
您应该传递字典的值而不是它们的键,否则您传递的是“自定义”,python 将无法识别它。我建议你试试这个:
df.plot(kind='pie', y='count',figsize=(15,15), fontsize = 14,colors = colors.values())
如果您写df.plot.pie(..., colors=colors)
,则使用字典的键列表。因此,它与 df.plot.pie(..., colors=['custom', 'black', 'blue', 'brown', 'green', 'grey', 'orange', 'purple', 'red', 'silver', 'white', 'yellow'])
相同。除了无效的颜色名称之外,这在很大程度上还取决于与数据帧的顺序相比,字典键的顺序。此外,使用 colors.values()
会给出有效的颜色名称,但仍然存在顺序不匹配的问题。
要正常工作,列中的每个值都需要使用颜色字典进行映射。通过 df['paint_color'].map(colors)
或 [colors[p] for p in df['paint_color']]
.
如果您将 'paint_color' 列设置为索引,pandas 绘图会将其显示为标签。这有助于验证颜色是否正确。
from matplotlib import pyplot as plt
import pandas as pd
from io import StringIO
df_str = ''' paint_color count
0 black 4821
1 blue 2850
2 brown 784
3 custom 755
4 green 887
5 grey 3221
6 orange 144
7 purple 66
8 red 2858
9 silver 4034
10 white 6096
11 yellow 127'''
df = pd.read_csv(StringIO(df_str), delim_whitespace=True)
colors = ({'custom': 'turquoise', 'black': 'black', 'blue': 'blue', 'brown': 'brown', 'green': 'green',
'grey': 'grey', 'orange': 'orange', 'purple': 'purple', 'red': 'red', 'silver': 'silver',
'white': 'antiquewhite', 'yellow': 'yellow'})
df.set_index('paint_color').plot(kind='pie', y='count', figsize=(15, 15), fontsize=14,
colors=[colors[p] for p in df['paint_color']])
plt.show()
PS:注意在题目的字典中,'custom'
这个键出现了两次。一次在第一位的值为 'black'
,一次在第六位的值为 'cyan'
.
可在 Wikipedia.
找到有效颜色名称列表
扇形扇形之间的细线很烦人,尤其是扇形扇形。可以将线宽设置为零以删除它们:
df.set_index('paint_color').plot(kind='pie', y='count', figsize=(15, 15), fontsize=14,
colors=df['paint_color'].map(colors), wedgeprops={'linewidth': 0})
我有一个包含车辆颜色的数据框。它看起来类似于:
paint_color count
0 black 4821
1 blue 2850
2 brown 784
3 custom 755
4 green 887
5 grey 3221
6 orange 144
7 purple 66
8 red 2858
9 silver 4034
10 white 6096
11 yellow 127
我已经导入了 pandas 和 matplotlib.pyplot(作为情节)
我正在绘制一个饼图来显示每种颜色的数量 - 当然我真的很喜欢这些颜色与..颜色相对应..所以我设置了一个颜色字典:
colors = ({'custom': 'black',"black": 'black', "blue": 'blue', "brown":'brown','custom': 'cyan',"green": 'green',"grey":'grey',"orange":'orange',"purple":'purple',"red":'red', "silver":'silver',"white":'gray',"yellow":'yellow'})
然后我开始使用以下代码进行绘图:
df.plot(kind='pie', y='count',figsize=(15,15), fontsize = 14,colors = colors)
但我收到以下错误:
ValueError: Invalid RGBA argument:custom
现在,如果我进行查询,其中我 select 除了自定义值之外的所有值,这些值按照我期望的方式排列(并且工作正常)
我不确定的是 - 错误是因为它不识别“自定义”而产生的吗?正如我一直在阅读此错误,它似乎可能是由不太明显的问题引发的,所以我想知道这是否是我面临的问题?
您应该传递字典的值而不是它们的键,否则您传递的是“自定义”,python 将无法识别它。我建议你试试这个:
df.plot(kind='pie', y='count',figsize=(15,15), fontsize = 14,colors = colors.values())
如果您写df.plot.pie(..., colors=colors)
,则使用字典的键列表。因此,它与 df.plot.pie(..., colors=['custom', 'black', 'blue', 'brown', 'green', 'grey', 'orange', 'purple', 'red', 'silver', 'white', 'yellow'])
相同。除了无效的颜色名称之外,这在很大程度上还取决于与数据帧的顺序相比,字典键的顺序。此外,使用 colors.values()
会给出有效的颜色名称,但仍然存在顺序不匹配的问题。
要正常工作,列中的每个值都需要使用颜色字典进行映射。通过 df['paint_color'].map(colors)
或 [colors[p] for p in df['paint_color']]
.
如果您将 'paint_color' 列设置为索引,pandas 绘图会将其显示为标签。这有助于验证颜色是否正确。
from matplotlib import pyplot as plt
import pandas as pd
from io import StringIO
df_str = ''' paint_color count
0 black 4821
1 blue 2850
2 brown 784
3 custom 755
4 green 887
5 grey 3221
6 orange 144
7 purple 66
8 red 2858
9 silver 4034
10 white 6096
11 yellow 127'''
df = pd.read_csv(StringIO(df_str), delim_whitespace=True)
colors = ({'custom': 'turquoise', 'black': 'black', 'blue': 'blue', 'brown': 'brown', 'green': 'green',
'grey': 'grey', 'orange': 'orange', 'purple': 'purple', 'red': 'red', 'silver': 'silver',
'white': 'antiquewhite', 'yellow': 'yellow'})
df.set_index('paint_color').plot(kind='pie', y='count', figsize=(15, 15), fontsize=14,
colors=[colors[p] for p in df['paint_color']])
plt.show()
PS:注意在题目的字典中,'custom'
这个键出现了两次。一次在第一位的值为 'black'
,一次在第六位的值为 'cyan'
.
可在 Wikipedia.
找到有效颜色名称列表扇形扇形之间的细线很烦人,尤其是扇形扇形。可以将线宽设置为零以删除它们:
df.set_index('paint_color').plot(kind='pie', y='count', figsize=(15, 15), fontsize=14,
colors=df['paint_color'].map(colors), wedgeprops={'linewidth': 0})