如何根据 x、y 坐标将饼图放置在另一个图中?

问题描述 投票:0回答:1

如何使用 pandas 和 matplotlib 将饼图定位到 geopandas 地图上的 x、y 坐标的特定位置?

我尝试先绘制各个点,然后修改代码,但相同的方法似乎无法转移。

-- 绘图点代码(

ax
是地图所在子图的轴)--

ax.plot(x, y, color=color, markersize=size, marker="o")

同样的方法不适用于绘制饼图,而我尝试过的任何其他解决方案(例如创建子轴)似乎完全破坏了绘图。

python python-3.x pandas matplotlib geopandas
1个回答
0
投票

你可以做这样的事情。请注意,您必须自己确定饼图的位置

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

这给出了这样的东西

© www.soinside.com 2019 - 2024. All rights reserved.