excel python 形状_Python省份六边形地图

  有的时候在做各省数据的时候,会发现有些省份面积很小,比如北京、天津、上海这种,然后再在上面加上数值和标签,就不容易进行分辨。所以这里就介绍一下把每个省都用相同大小的六边形来概括,然后整体分布位置大概按照地图的分布排列,当然结果因此会有的省份稍微偏移,但整体是可以看明白的。

  主要是plotnine结合pyplot,这里要介绍一下plotnine,后面应该会详细介绍的,对这个库还是很亲切,为什么呢?因为R里面那优雅的ggplot2包。plotnine库是基于ggplot2的,而且语法风格和ggplot2基本一样,很强大。节奏应该是把R里面的ggplot2写了,再来写pyplot。

11bc875ac781bb1f8d022d410e9ebc60.png

  结果就是上面这张图,数据用的是2019年各省的GDP,看上去还是很直观明了,还要颜色层次的划分,根据根据个人喜好自定义颜色。下面就是代码情况,Python实现。

  先做常规的准备,导库,中文显示,读取数据↓

import osos.chdir(r"E:\Python\可视化\六边地图")import pandas as pdimport numpy as npfrom plotnine import *from pylab import mplimport matplotlib.pyplot as pltimport matplotlib.patches as mpathesfrom matplotlib.collections import PatchCollectionfrom matplotlib import cm, colorsmpl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['axes.unicode_minus'] = False# 禁用科学计数法pd.set_option('display.float_format', lambda x: '%.2f' % x) df = pd.read_excel('中国省份坐标31.xlsx')gdp = pd.read_excel('各省2019年GDP数据.xlsx')

37e356c0892f6940563fa44abce9100b.png

  这个是省份六边形的相对坐标值,一共六个边,数据统一通过下面的链接就行下载,可以用来直接用。

https://linss.oss-cn-beijing.aliyuncs.com/Python/Map/%E4%B8%AD%E5%9B%BD%E7%9C%81%E4%BB%BD%E5%9D%90%E6%A0%8731.xlsx

  各省的GDP数据就是常规的省份+GDP两列,这个很简单,如下↓

62f46e79ee38c81c716b920925ed5d16.png

  下面是对数据的一些处理转换

# 计算每个省份的中心坐标df_center = df.groupby('Province').mean()

9045f73d166e28ce6264bc298f466317.png

# 合并省份坐标和数据dfxy = pd.merge(df_center, gdp, on='Province', how ='left')

4c997428ed2a8d4b400725f3008e3137.png

# 定义颜色数值color_value = np.array(dfxy.GDP)

1f14530ee1a93bd0fa57536ae942ff43.png

  下面就是常规的画图了,这里可以直接拿来用,要全部看明白的话,需要把matplotlib和plotnine研究一下,后面会详解的,先用着。

fig, ax = plt.subplots(figsize=(10, 9))# 设置背景颜色fig.set_facecolor('w')ax.set_facecolor('w')# 设置标题ax.set_title('\n各省2019年的GDP数据', loc='center', fontsize=26, color='#CA391F')# 循环设置每个省份patches = []for Province in np.unique(df['Province']):    # 筛选每个省份的数据    dfp = df[df['Province'] == Province]    # 多边形的每个位置    rect = mpathes.Polygon([(x, y) for x, y in zip(dfp['x'], dfp['y'])])    patches.append(rect)    # 多边形内部显示省份名称和数据    ax.text(df_center.loc[Province].x, df_center.loc[Province].y,             '\n'+Province+'\n'+'%.2f' % dfxy[dfxy['Province'] == Province].GDP.values[0],             fontsize=15, va='center', ha='center', color='#CA391F')# 填充形状和颜色collection = PatchCollection(patches, alpha=0.5, cmap=plt.cm.GnBu, ec='#7CB1FF', fc='w', lw=1)collection.set_array(color_value)ax.add_collection(collection)# 隐藏边框ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['left'].set_visible(False)ax.spines['bottom'].set_visible(False)# 隐藏 X、Y 轴ax.xaxis.set_visible(False)ax.yaxis.set_visible(False)# 避免变形plt.axis('equal')plt.margins(0,0)plt.show()plt.savefig(f'Last30Days_equipment.png',bbox_inches='tight')
2cf32f547c58a284879238dfa5593d5a.gif

End

191368761bc3609550a34b2086c025ae.gif

◆ Python高德地图可视化 ◆ Python拼音 ◆ Python_头像动漫化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值