值错误:无效的 RGBA 参数:'rgbkymc'

dhr*_*waj 11 python matplotlib python-3.x

train_class = train_df['Class'].value_counts().sortlevel()
my_colors = 'rgbkymc'  #red, green, blue, black, etc.
train_class.plot(kind='bar', color=my_colors)
plt.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)

我越来越:

Value Error : Invalid RGBA argument : 'rgbkymc'
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会出现此错误,因为我已经检查了所有内容并且看起来很好。

任何人都可以帮我找出错误吗?

KeyError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\matplotlib\colors.py in to_rgba(c, alpha)
131     try:
--> 132         rgba = _colors_full_map.cache[c, alpha]
133     except (KeyError, TypeError):  # Not in cache, or unhashable.

KeyError: ('rgbkymc', None)
Run Code Online (Sandbox Code Playgroud)

Sha*_*fiq 13

该问题需要稍作修改,因为它首先会引发以下错误:

```AttributeError: 'Series' 对象没有属性 'sortlevel'```

这是因为sortlevel从 0.20.0 版本开始被弃用。您应该改为使用sort_index代替它。

另外,命令color参数中象征颜色的字母plot需要在列表中提供,而不是在字符串中。您可以在上的指定颜色中阅读有关它的更多信息。

因此,您可以使用以下代码:

train_class = train_df['Class'].value_counts().sort_index()
my_colors = ['r', 'g', 'b', 'k', 'y', 'm', 'c']  #red, green, blue, black, 'yellow', 'magenta' & 'cyan'
train_class.plot(kind = 'bar', color = my_colors)
plt.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 12

Dataframe.plot()实际上并不需要color争论matplotlib.pyplot.bar()如果您想使用简单的颜色序列,则必须直接驱动调用(但请注意,有更好的选择,如下所列)。

如果您确实决定matplotlib.pyplot.bar()直接使用,那么请考虑到它的color参数仅采用单个有效颜色值、 so'r''k'或此类颜色值的序列(将其称为数组文档,bar())。一个列表的名称将工作:

my_colors = ['r', 'g', 'b', 'k', 'y', 'm', 'c']  # red, green, blue, black, etc.

plt.bar(len(train_class), train_class, color=my_colors)
Run Code Online (Sandbox Code Playgroud)

文档指出,序列的长度应与绘制的条形数量相等:

可选参数coloredgecolorlinewidthxerryerr可以是标量或长度等于条数的序列。

但是,将颜色映射传递到Dataframe.plot()此处更容易。颜色映射是通向不同条形颜色的便捷途径。您可以将一个作为colormap关键字参数传入,这可以是一个命名映射(作为字符串):

train_class.plot(kind='bar', colormap='Paired')
Run Code Online (Sandbox Code Playgroud)

或来自matplotlib.cm模块的实际 matplotlib 颜色图对象:

from matplotlib import cm

train_class.plot(kind='bar', colormap=cm.Paired)
Run Code Online (Sandbox Code Playgroud)

如果您想坚持使用matplotlib.pyplot.bar(),但使用颜色图,则从颜色图创建您的一系列颜色。Pandasnp.linspace()用于此,所以我们也这样做:

import numpy as np

paired_colors = cm.Paired(np.linspace(0, 1, num=len(train_class))
plt.bar(len(train_class), train_class, color=paired_colors)
Run Code Online (Sandbox Code Playgroud)

对于条形图,我会选择一个定性的颜色图;每个名称都是cm颜色图模块的一个属性。在上面,cm.Paired是一个这样的颜色图。使用介于 0.0 和 1.0 之间的一系列浮点数调用颜色图可以为您提供在该范围的每个“百分比”处选取的背景颜色。您还可以传入一系列整数来索引单个颜色。

回到 Pandas,您也可以使用一个matplotlib.colors.ListedColormap实例从精心挑选的颜色序列创建颜色图:

from matplotlib.colors import ListedColormap

my_colors = ['r', 'g', 'b', 'k', 'y', 'm', 'c']  # red, green, blue, black, etc.
my_colormap = ListedColormap(my_colors)
Run Code Online (Sandbox Code Playgroud)

然后将其传递给您的数据帧.plot()调用:

train_class.plot(kind='bar', colormap=my_colormap)
Run Code Online (Sandbox Code Playgroud)