如何在印度地图上叠加绘制折线图?解决双图不同轴问题
折线图叠加印度地图的解决方案
你的代码问题在于创建了两个独立的坐标轴:df.plot()会默认生成一个坐标轴,后续fig, ax = plt.subplots()又创建了新的坐标轴,导致折线和地图分别在不同画布上显示。要实现叠加,需复用同一个坐标轴对象,步骤如下:
修改后的代码
import pandas as pd import matplotlib.pyplot as plt # 创建示例数据框 df = pd.DataFrame({ 'x': [15.121270, 12.103705, 8.583936, 18.173364, 14.175727], 'y': [4246.948356, 4248.927074, 4247.596317, 4244.749973, 4290.142397] }) # 读取地图图片 im = plt.imread("Map_of_India.jpg") # 创建画布和统一的坐标轴 fig, ax = plt.subplots() # 在坐标轴上绘制地图,extent参数匹配数据的x、y范围 # 格式为 [x最小值, x最大值, y最小值, y最大值],确保地图与数据坐标对齐 ax.imshow(im, extent=[df['x'].min(), df['x'].max(), df['y'].min(), df['y'].max()], aspect='auto') # 在同一坐标轴上绘制折线图 df.plot('x', 'y', kind='line', legend=None, ax=ax) # 设置坐标轴标签 ax.set_xlabel('IPP Longitude') ax.set_ylabel('IPP Latitude') plt.show()
关键说明
- 复用坐标轴:通过
df.plot(..., ax=ax)指定折线图绘制在已创建的ax坐标轴上,避免生成新画布。 - 地图范围匹配:
extent参数用于定义地图在坐标轴上的显示范围,必须与你的数据x(经度)、y(纬度)的取值范围对应,否则地图和折线会错位。如果你的y值(示例中4244-4290)不是真实纬度,需要先确认数据的坐标系统,调整extent或转换数据单位。 - 自适应比例:
aspect='auto'让地图自适应坐标轴比例,避免图像拉伸变形。
内容的提问来源于stack exchange,提问作者Prater
相关产品推荐
相关产品推荐

