使用plt.bar绘制堆叠柱状图时x轴重复值被自动去除如何解决
问题1解答
你当前直接提取Price列作为x值的方式不可行。matplotlib对数值型x坐标默认会按数值本身的大小定位,相同数值的柱子会被堆叠到同一个x坐标位置,不会为每行数据单独分配独立位置。你不需要将值转成字符串,但需要先为每行生成独立的位置索引作为绘图用的x坐标。
问题2解答
要实现x轴刻度数量和DataFrame行数完全一致,按以下步骤操作:
- 生成从0开始、长度等于DataFrame行数的序列作为实际绘图的x坐标,保证每个行的柱子有独立的位置
- 绘制第二个堆叠系列时添加
bottom参数指定为第一个系列的数值,实现真正的堆叠效果,避免两个系列的柱子互相覆盖 - 手动设置x轴的刻度标签为
Price列的对应值
完整实现代码
import matplotlib.pyplot as plt import pandas as pd # 注意提前清理原数据中share_1列多余的小数点(比如0.2.、0.5.这类错误格式) # 生成和df行数一致的独立x位置 x_pos = range(len(df)) y1 = df['share_1'] y2 = df['share_2'] # 绘制堆叠柱状图 plt.bar(x_pos, y1, label='share_1') plt.bar(x_pos, y2, bottom=y1, label='share_2') # 手动设置x轴刻度标签为Price列的取值 plt.xticks(x_pos, df['Price']) # 其他可视化配置 plt.xlabel('Price') plt.ylabel('Share') plt.legend() plt.show()
运行后x轴会显示和DataFrame行数一致的9个刻度,不会自动合并去重。
内容的提问来源于stack exchange,提问作者jess
相关产品推荐
相关产品推荐

