折线图与对应条形图不对齐:折线起始于week2而非week1
折线图起始位置偏移问题解决方法
你遇到的问题是:同一坐标轴上的条形图和折线图,折线没有从week1的位置开始,而是偏移到了week2的位置。这是因为条形图的x轴是分类类型(分组后的week索引被当作分类标签),而折线图默认把x轴解析为数值类型,两者的坐标映射规则不一样,导致对齐错位。
修复方案1:手动指定折线的x坐标
用matplotlib原生的plot函数,把x轴设置为条形图的位置索引(0到52,对应week1到week53),就能和条形图完全对齐:
import pandas as pd import matplotlib.pyplot as plt # 补充导入plt,原代码漏了这行 url = 'https://raw.githubusercontent.com/Arancium98/datasets/main/ventas_pizzas2.csv' df = pd.read_csv(url) VentaS = df.groupby('week')['total_price'].sum() fig, ax = plt.subplots(figsize=(15, 5)) # 绘制条形图 VentaS.plot(kind='bar', ax=ax, title='Ventas por semana') # 用range生成对应条形位置的x坐标,绘制折线 ax.plot(range(len(VentaS)), VentaS.values, color='tab:orange', marker='o') plt.show()
修复方案2:将week索引转为字符串
把分组后的week索引转换成字符串类型,让pandas把x轴统一当作分类处理,折线图就会自动对齐:
import pandas as pd import matplotlib.pyplot as plt url = 'https://raw.githubusercontent.com/Arancium98/datasets/main/ventas_pizzas2.csv' df = pd.read_csv(url) VentaS = df.groupby('week')['total_price'].sum() # 将索引转为字符串,统一x轴类型 VentaS.index = VentaS.index.astype(str) fig, ax = plt.subplots(figsize=(15, 5)) VentaS.plot(kind='bar', ax=ax, title='Ventas por semana') VentaS.plot(kind='line', color='tab:orange', ax=ax, marker='o') plt.show()
注意事项
原代码里缺少import matplotlib.pyplot as plt的导入,运行时会报错,必须补上。另外添加marker='o'可以让折线的每个数据点更醒目,方便对应查看。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

