ValueError: 'c' argument must be a color, a sequence of colors, or a sequence of numbers

ValueError: 'c' argument must be a color, a sequence of colors, or a sequence of numbers

homicide_scatter_df.plot.scatter(x='Homicide',y='Area Name',s = 225,
                                c = 'Population/mil', colormap='viridis', 
                                 sharex=False)

上面的代码有效,我得到了我的散点图,其中的点根据区域人口改变颜色。

fig, ax = plt.subplots(figsize=(10, 6))

ax.scatter(x = homicide_scatter_df['Homicide'], 
           y = homicide_scatter_df['Area Name'],
           s = 225,
           c = 'Population/mil', colormap='viridis',
           sharex=False)

但是,上面的代码会抛出关于 c:

的错误

ValueError: 'c' argument must be a color, a sequence of colors, or a sequence of numbers, not Population/mil


更新:修复列问题后,颜色条仍然存在问题。

在 pandas 图表的右侧,我得到一个带有标签“Population/mil”的颜色范围条。 matplotlib 版本不呈现具有一系列颜色的相同颜色条。是否可以使用第二种方法获得相同的颜色条?

更新:我现在有了颜色条,但颜色的顺序与数据相反。

norm = colors.Normalize(homicide_scatter_df['Population/mil'].max(), homicide_scatter_df['Population/mil'].min())
plt.xticks(rotation=90)
fig.colorbar(cm.ScalarMappable(norm=norm,cmap='YlGnBu'), ax=ax)

以上代码在正确的位置和正确的值显示了栏。但是,颜色与点颜色的顺序相反。

如何更改颜色以正确上升?

在 pandas 图中,c='Population/mil' 有效,因为 pandas 已经知道这是 homicide_scatter_df.

的一列

在 matplotlib 图中,您需要像对 xy:

那样传递整列
ax.scatter(x=homicide_scatter_df['Homicide'], 
           y=homicide_scatter_df['Area Name'],
           c=homicide_scatter_df['Population/mil'], # actual column, not column name
           s=225, colormap='viridis', sharex=False)

或者如果您指定 data 来源,那么您可以只传递类似于 pandas:

的列名

data: If given, parameters can also accept a string s interpreted as data[s].

另外,matplotlib 中的颜色映射处理也不同。将 colormap 更改为 cmap 并手动调用 colorbar

ax.scatter(data=homicide_scatter_df, # define data source
           x='Homicide',             # column names
           y='Area Name',
           c='Population/mil',
           cmap='viridis',           # colormap -> cmap
           s=225, sharex=False)
plt.colorbar(label='Population/mil') # manually add colorbar