pandas按行绘制DataFrame柱状图子图报无效颜色错误解决方法
报错原因
开启subplots=True绘制多子图时,pandas对color参数的解析逻辑和单图模式不同:
- 单图模式下多系列配色需要传入嵌套列表,每个子列表对应一个系列的颜色
- 子图模式下传入的一维列表元素会按顺序匹配每个绘图系列(也就是你df2里的每一行),如果传入嵌套列表,pandas会把整个内层列表当成单个颜色值解析,无法识别就会抛出
Invalid color ['C0', 'C1']错误。
修正代码
你的df2共2行(对应索引3、4,即每个子图内的2根柱子)、64列(每个三碱基序列对应1个子图),要实现所有子图两根柱子固定配色,只需要给color传入长度为2的一维颜色列表即可,顺序和df2的行顺序一一对应。
bar = df2.plot( kind='bar' , stacked=False, figsize = (20,40), title='Grouped Bar Graph with dataframe', subplots = True, layout=(16,4), legend = False, sharey = True, fontsize = 5, ylim = (95,100), # 顺序对应df2的两行:第一根柱子蓝色,第二根柱子橙色 color=['C0', 'C1'] )
如果你要明确指定蓝、橙配色,也可以替换成标准色值:color=['blue', 'orange']或者十六进制色值color=['#1f77b4', '#ff7f0e'],效果一致。
注意事项
- 颜色顺序严格和df2的行顺序绑定:列表第一个颜色匹配索引为
3的行(所有子图的第一根柱),第二个颜色匹配索引为4的行(所有子图的第二根柱) - 不要给颜色列表额外嵌套一层方括号,嵌套格式仅适用于
subplots=False的单图多系列场景 - 传入的颜色数量需要和每个子图内的柱子数量(即df2的行数)保持一致
内容的提问来源于stack exchange,提问作者Ania Lewicka
相关产品推荐
相关产品推荐

