底图:绘制包含国家和数据气泡的世界地图
Basemap: plot a world map with countries and bubbles with data
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.
导入 pandas 作为 pd
来自 mpl_toolkits.basemap 导入底图
将 matplotlib.pyplot 导入为 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
的调用,它缺少国家坐标并且未传递正确的大小对于气泡。
您首先需要的是数据集中所有国家/地区的 lat/lon 坐标列表 - 还有另一个 Whosebug question here 提供了一些获取此信息的选项。
然后您需要将这些坐标合并到您现有的数据集中。假设您已成功完成此操作并且坐标位于数据集的 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')
(您可能需要稍微调整一下上面的偏移量)
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.
导入 pandas 作为 pd 来自 mpl_toolkits.basemap 导入底图 将 matplotlib.pyplot 导入为 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
的调用,它缺少国家坐标并且未传递正确的大小对于气泡。
您首先需要的是数据集中所有国家/地区的 lat/lon 坐标列表 - 还有另一个 Whosebug question here 提供了一些获取此信息的选项。
然后您需要将这些坐标合并到您现有的数据集中。假设您已成功完成此操作并且坐标位于数据集的 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')
(您可能需要稍微调整一下上面的偏移量)