如何使用 pandas 和 matplotlib 将饼图定位到 geopandas 地图上的 x、y 坐标的特定位置?
我尝试先绘制各个点,然后修改代码,但相同的方法似乎无法转移。
-- 绘图点代码(
ax
是地图所在子图的轴)--
ax.plot(x, y, color=color, markersize=size, marker="o")
同样的方法不适用于绘制饼图,而我尝试过的任何其他解决方案(例如创建子轴)似乎完全破坏了绘图。
你可以做这样的事情。请注意,您必须自己确定饼图的位置
import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
gdf = gdf[gdf.name == "United States of America"]
df_pie_data = pd.DataFrame({
'x': [-100, -90],
'y': [40, 45],
'category_a': [10, 20],
'category_b': [30, 15]
})
def add_pie_chart(ax, data_row, sizes, coords):
bbox = ax.get_position()
trans = ax.transData + fig.transFigure.inverted()
x_fig, y_fig = trans.transform(coords)
width, height = 0.1, 0.1
pie_ax = fig.add_axes([x_fig - 2*width , y_fig - 2*height, width, height], aspect='equal')
pie_ax.pie(sizes, startangle=90)
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
gdf.plot(ax=ax)
for idx, row in df_pie_data.iterrows():
x, y = row['x'], row['y']
sizes = [row['category_a'], row['category_b']]
add_pie_chart(ax, row, sizes, (x, y))
plt.show()