You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何绘制x轴为年份、含趋势线的双y轴散点图及代码调试

双Y轴散点图(含趋势线)实现方案

原有代码存在以下可优化点:

  • plt.scatter()返回值为散点对象,不能直接解构赋值给fig, ax1,运行会直接报错
  • 重复创建crops1和crops2属于冗余操作,可直接复用原始crops数据
  • 缺少趋势线绘制、坐标轴标注、图例等必要可视化配置

完整可运行代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 请确保你的crops数据集已提前正确加载
# 1. 初始化画布与双Y轴
fig, ax1 = plt.subplots(figsize=(10, 6))
ax2 = ax1.twinx()

# 2. 绘制左侧Y轴(面积:单位hectare)
# 散点图
ax1.scatter(crops['Years'], crops['Area_ha'], color='tab:blue', label='实际面积')
# 线性趋势线拟合与绘制
z_area = np.polyfit(crops['Years'], crops['Area_ha'], deg=1)
p_area = np.poly1d(z_area)
ax1.plot(crops['Years'], p_area(crops['Years']), color='tab:blue', linestyle='--', 
         label=f'面积趋势线:y={z_area[0]:.2f}x+{z_area[1]:.2f}')
# 左侧Y轴样式配置
ax1.set_xlabel('年份', fontsize=12)
ax1.set_ylabel('面积(hectare)', color='tab:blue', fontsize=12)
ax1.tick_params(axis='y', labelcolor='tab:blue')

# 3. 绘制右侧Y轴(产量:单位Kg/ha)
# 散点图
ax2.scatter(crops['Years'], crops['Yield_kg'], color='tab:red', label='实际产量')
# 线性趋势线拟合与绘制
z_yield = np.polyfit(crops['Years'], crops['Yield_kg'], deg=1)
p_yield = np.poly1d(z_yield)
ax2.plot(crops['Years'], p_yield(crops['Years']), color='tab:red', linestyle='--',
         label=f'产量趋势线:y={z_yield[0]:.2f}x+{z_yield[1]:.2f}')
# 右侧Y轴样式配置
ax2.set_ylabel('产量(Kg/ha)', color='tab:red', fontsize=12)
ax2.tick_params(axis='y', labelcolor='tab:red')

# 4. 合并图例与全局样式配置
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')

plt.title('作物面积、产量随年份变化趋势', fontsize=14)
plt.grid(alpha=0.3)
plt.show()

补充说明

如果需要使用非线性趋势线,只需修改np.polyfit的第三个参数deg即可,比如deg=2为二次多项式拟合。

内容的提问来源于stack exchange,提问作者Issa KASSOGUE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:09:02