gpt4 book ai didi

python-3.x - 将给定坐标处的饼图添加到 cartopy 投影

转载 作者:行者123 更新时间:2023-12-04 03:05:11 26 4
gpt4 key购买 nike

我是数据可视化的初学者,对于 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())

那不起作用,所以我检查了一下,发现了这个 Cartopy coastlines hidden by inset_axes use of Axes.pie但我不明白引擎盖下发生了什么,而且似乎仅限于 PlateCarre()。我已经尝试修改它,但我没有设法让它正常工作。

所以我非常简单的问题是如何在给定纬度和经度的情况下向特定投影添加多个饼图?如果你能提出你的答案,你会很受欢迎。

最佳答案

您可以使用 inset_axes将新轴放入图中,这将允许承载饼图。 inset_axes 的位置由 bbox_to_anchor 决定争论。要让此参数使用 cartopy 轴的投影坐标 ( ax ),您需要设置 bbox_transform=ax.transData .
如果您的坐标在不同的坐标系中,则需要使用投影的 .transform_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()

enter image description here

关于python-3.x - 将给定坐标处的饼图添加到 cartopy 投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45266955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com