pandas绘制bar柱状图为不同变量指定edgecolor边缘色结果异常如何解决
问题原因
pandas 的 plot.bar 方法接收列表格式的 edgecolor 参数时,默认是按所有柱体的绘制顺序依次匹配颜色,而非按数据列分组匹配。你传入的两个颜色会循环作用在每一个柱体上,自然就出现了同一列的柱体边缘色交替变化的问题。
解决方案
你可以在绘图完成后,分别获取两列对应的柱体容器,批量设置边缘色即可,修改后的代码如下:
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({"col1":[1,2,4,5,6], "col2":[4,5,1,2,3]}) def amounts(df): fig, ax = plt.subplots(1,1, figsize=(3,4)) df.filter(['col1','col2']).plot.bar( ax=ax, stacked=True, fill=False, linewidth=2, rot=0 ) # 分别为两列柱体设置边缘色 ax.containers[0].set_edgecolor('red') ax.containers[1].set_edgecolor('green') ax.set_xlabel("") plt.tight_layout() plt.show() amounts(df)
补充说明
pandas 内置绘图是对 matplotlib 能力的上层封装,遇到精细化样式控制需求时,直接操作 matplotlib 返回的画布、轴、图形元素对象会比直接传参数给pandas的plot方法灵活很多。
内容的提问来源于stack exchange,提问作者safex
相关产品推荐
相关产品推荐

