Python 3.x 将给定坐标处的饼图添加到cartopy投影
我是数据可视化的初学者,尤其是cartopy,我知道对大多数人来说,我的问题是显而易见的。我正在努力熟悉cartopy,我成功地绘制了文本和要点。但我无法用饼图实现它 我只想在一个特定的投影上画一个饼图。但是我真的很困惑,尽管有cartopy的文档。我先试试这个:Python 3.x 将给定坐标处的饼图添加到cartopy投影,python-3.x,matplotlib,pie-chart,cartopy,Python 3.x,Matplotlib,Pie Chart,Cartopy,我是数据可视化的初学者,尤其是cartopy,我知道对大多数人来说,我的问题是显而易见的。我正在努力熟悉cartopy,我成功地绘制了文本和要点。但我无法用饼图实现它 我只想在一个特定的投影上画一个饼图。但是我真的很困惑,尽管有cartopy的文档。我先试试这个: import cartopy.crs as ccrs import matplotlib.pyplot as plt ax = plt.axes(projection=ccrs.Robinson()) ax.coastlines(r
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
ax = plt.axes(projection=ccrs.Robinson())
ax.coastlines(resolution='110m') # 110, 50, 10
ax.stock_img()
lat, long = 30, 30 # the latitude longitude
ax.pie(long, lat, [0.25, 0.75], transform=ccrs.PlateCarree())
这不起作用,所以我检查了一下,发现了这个,但我不明白引擎盖下发生了什么,而且它似乎仅限于PlateCarre()。我试图修改它,但我没有设法让它正常工作
所以我非常简单的问题是,在给定纬度和经度的情况下,如何在特定投影中添加几个饼图?如果你能给出你的答案,你将非常受欢迎。你可以使用
插入轴
在绘图中放置一个新轴,这将允许作为饼图的主体。插入轴的位置由bbox\u到\u锚定
参数确定。要使此参数使用cartopy轴的投影坐标(ax
),需要设置bbox\u transform=ax.transData
。
如果坐标位于不同的坐标系中,则需要首先使用投影的.transform\u point
方法将其转换为正在使用的坐标系
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
ax = plt.axes(projection=ccrs.Robinson())
ax.coastlines(resolution='110m')
ax.stock_img()
def plot_pie_inset(data,ilon,ilat,ax,width):
ax_sub= inset_axes(ax, width=width, height=width, loc=10,
bbox_to_anchor=(ilon, ilat),
bbox_transform=ax.transData,
borderpad=0)
wedges,texts= ax_sub.pie(data)
ax_sub.set_aspect("equal")
lon,lat = 90,30
lonr,latr = ccrs.Robinson().transform_point(lon,lat, ccrs.PlateCarree())
plot_pie_inset([0.25, 0.75],lonr,latr,ax,0.5)
plt.show()
饼图是否与地图坐标相关?或者它更像是一个饼图,您希望显示在与地图相同的区域,如中?我想作为这个问题答案之一的作者,我可能会在这里提供帮助,但我很难理解你到底想做什么。请注意,是什么让另一个答案变得复杂,因为饼图在海岸线后面。如果你想把它放在上面,应该会容易得多。我想根据坐标(经度和纬度)绘制几个不同的饼图。对于海岸线我不介意。你的代码切换了所有地方的纬度/经度。虽然结果是正确的,但是,是的,因为它在所有地方都存在,这并不重要。我现在改了,谢谢你指出这一点。