Python 3.x 将给定坐标处的饼图添加到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

我是数据可视化的初学者,尤其是cartopy,我知道对大多数人来说,我的问题是显而易见的。我正在努力熟悉cartopy,我成功地绘制了文本和要点。但我无法用饼图实现它

我只想在一个特定的投影上画一个饼图。但是我真的很困惑,尽管有cartopy的文档。我先试试这个:

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()

饼图是否与地图坐标相关?或者它更像是一个饼图,您希望显示在与地图相同的区域,如中?我想作为这个问题答案之一的作者,我可能会在这里提供帮助,但我很难理解你到底想做什么。请注意,是什么让另一个答案变得复杂,因为饼图在海岸线后面。如果你想把它放在上面,应该会容易得多。我想根据坐标(经度和纬度)绘制几个不同的饼图。对于海岸线我不介意。你的代码切换了所有地方的纬度/经度。虽然结果是正确的,但是,是的,因为它在所有地方都存在,这并不重要。我现在改了,谢谢你指出这一点。