I am trying to create a world map in background and bubble on top of it to show the data. I am using code below to create it but this gives a map in background with out country names and plane circle which doesnt show the location of country.
进口大熊猫作为PD 从 mpl_toolkits.底图导入底图 import matplotlib.pyplot as plt
# Set the dimension of the figure
my_dpi=10
plt.figure(figsize=(2600/my_dpi, 1800/my_dpi), dpi=my_dpi)
# read the data (on the web)
# Make the background map
m=Basemap(llcrnrlon=-180, llcrnrlat=-65,urcrnrlon=90,urcrnrlat=80)
m.drawmapboundary(fill_color='#A6CAE0', linewidth=0)
m.fillcontinents(color='grey', alpha=0.3)
m.drawcoastlines(linewidth=0.1, color="white")
# prepare a color for each point depending on the continent.
#data['labels_enc'] = pd.factorize(data['homecontinent'])[0]
# Add a point per position
m.scatter(conversion_comparison['Res'],conversion_comparison['Sea'],
s=1000, alpha=1.0, c=colors)
包含转化率数据的数据帧
数据conversion_comparison数据帧:
Country Sea Res ConvRate(%) Country_codes
Spain 6179 85 1.38 ES
United Kingdom 495 99 2.00 GB
France 473 12 2.55 FR
United States 442 7.8 1.76 US
Italy 358 7.4 2.07 IT
Germany 153 3.3 2.15 DE
Argentina 135 1.9 1.41 AR
Ireland 132 3.3 2.49 IE
Belgium 122 4.3 3.51 BE
Israel 109 2.2 1.82 IL
I want bubbles to have country code and converson rate and size of bubble based on conversion rate value
请建议需要对代码进行修改才能创建地图。我还附加了图像以使最终输出看起来像。
[Output i am getting][1]
[1]: https://i.stack.imgur.com/XagnV.png
[output i want][2]
[2]: https://i.stack.imgur.com/PVFX6.jpg
仍然无法完全回答您的问题,因为您的示例不太可行,但关键在于您对m.scatter
的调用,它缺乏国家坐标并且没有传递气泡的正确大小。
首先,您需要的是数据集中所有国家/地区的纬度/纬度坐标列表 - 这里有另一个 StackOverflow 问题,它提供了一些获取此坐标的选项。
然后,您需要将这些坐标合并到现有数据集中。假设您已成功执行此操作,并且坐标位于数据集的列lat
和lon
中,则可以按如下方式调用m.scatter
:
m.scatter(conversion_comparison['lat'],conversion_comparison['lon'],
s=conversion_comparison['ConvRate(%)'], alpha=1.0, c=colors)
如果您还想向气泡添加标签,则可以执行以下操作:
labels = conversion_comparison.Country.values
for label, xpt, ypt in zip(labels, conversion_comparison.lon.values, conversion_comparison.lat.values):
plt.annotate(label, xy=m(xpt, ypt), xycoords="data", backgroundcolor="w",
xytext=(1,1), textcoords='offset points')
(您可能需要稍微调整一下上面的偏移量(