ValueError:无效的 RGBA 参数:'rgbkymc'

新手上路,请多包涵
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()

我越来越:

 Value Error : Invalid RGBA argument : 'rgbkymc'

我无法理解为什么会出现此错误,因为我已经检查了所有内容并且看起来还不错。

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

 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)

原文由 dhruv bhardwaj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

Dataframe.plot() 实际上并没有 _采用 color 参数_。如果您想使用简单的颜色序列,则必须直接调用 matplotlib.pyplot.bar() 调用(但请注意,下面列出了更好的选项)。

如果您决定直接使用 matplotlib.pyplot.bar() ,那么请考虑它是 color 参数然后只采用一个 _有效的颜色值_,所以 'r' -b27 或 –b5cf4bfea72d64a452d69fd27b 'k' 26 --- ,或 一系列 这样的颜色值( 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)

文档指出序列的长度应等于绘制的条数:

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

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

 train_class.plot(kind='bar', colormap='Paired')

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

 from matplotlib import cm

train_class.plot(kind='bar', colormap=cm.Paired)

如果您想坚持使用 matplotlib.pyplot.bar() ,但使用颜色图,则从颜色图创建您的颜色系列。 Pandas 使用 np.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)

对于条形图,我会选择 定性颜色 图;每个名称都是 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)

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

 train_class.plot(kind='bar', colormap=my_colormap)

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 4.0 许可协议

这个问题需要稍微修改一下,因为它首先会引发以下错误:

```AttributeError: ‘Series’ 对象没有属性 ‘sortlevel’```

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

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

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

 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()

原文由 Shayan Shafiq 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题