把一些地域性比较明显的数据显示在一张地图上,远比给别人一个 Excel 文件好得多,或者其他的呈现方式要更好。如上图,全国各个地级市的GDP用地图散点图呈现其实更加明了。
python里面有一个pyecharts包,里面有一个Geo组件,就支持在地理坐标系上绘制散点图。
打开命令窗口,使用pip安装。
pip install pyechart
绘制地图除了pyecharts包,还需要导入相应的地图文件包,同样是使用pip安装。
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg
pyecharts是一个功能很全面的包,其中有一个Geo组件,该组件是地理坐标系组件,用于地图的绘制,支持在地理坐标系上绘制散点图。地理坐标系就是地点的经纬度。所以如果要用pyecharts在地图上绘制散点图,就需要用到地点的经纬度。
我们先来看一下Geo组件用来绘制散点的参数。
参数 | 含义 |
---|---|
attr | 标签名称(在例子里面就是地点) |
value | 数值(在例子里就是GDP) |
visual_range | 可视化的数值范围 |
symbol_size | 散点的大小 |
visual_text_color | 标签颜色 |
is_piecewise | 颜色是否分段显示(False为渐变,True为分段) |
is_visualmap | 是否映射(数量与颜色深浅是否挂钩) |
maptype | 地图类型,可以是中国地图,省地图,市地图等等 |
visual_split_number | 可视化数值分组 |
geo_cities_coords | 自定义的经纬度 |
了解到这些参数之后我们就可以用pyecharts来绘制地图了。
我们先导入Geo组件和pandas库,用来读取我们的数据表格。
from pyecharts import Geo
import pandas as pd
我们先用pandas读取我们的数据,关于全国各个地级市2016年的GDP(数据有缺失)。
df = pd.read_excel('各省市经纬度.xlsx')
df.head()
我们可以看到每一个地级市对应的经纬度和GDP。
我们首先建立一个Geo坐标系,设定好图片标题,以及图片大小和背景色。
geo = Geo("2016年全国各地级市GDP(万亿)",#设置地图标题
title_color="#fff",#设置标题颜色为白色
title_pos="center",#标题位置在中间
width=1200,#图片宽度
height=600,#图片长度
background_color='#404a59'#设置图片背景颜色
)
这时我们已经建立了一个地图坐标系,我们要向里面传入绘制散点的参数。这之前我们要先了解geo_cities_coords这个参数。
geo_cities_coords这个参数比较特殊,它的参数是一个字典,每一组是这样写的:城市名:[经度,纬度]。如:
geo_cities_coords的key值与attr 是一致的。
了解到这些那我们现在构建参数。
attr = list(df['市'])
value = list(df['GDP(万亿)'])
geo_cities_coords = {df.iloc[i]['市']:[df.iloc[i]['经度'], df.iloc[i]['纬度']] for i in range(len(df))}
参数构建好了,我们往我们构建好的地理坐标系传入我们构建好的参数。利用add传进去参数。
geo.add("", #标题,构建坐标系的时候已经写好,不需要设置,设为空
attr,#城市名
value,#各城市的GDP
visual_range=[0, 28000],#可视化深浅的范围
visual_text_color="#fff",#标签的颜色
is_piecewise=True,#设置颜色分段显示
visual_split_number=10,#设置10个不同的组
symbol_size=7.5,#设置散点大小为7.5
is_visualmap=True,#设置颜色与value一一对应,value越高,颜色越深
geo_cities_coords=geo_cities_coords#设置散点所在的经纬度
)
我们通过attr,value,geo_cities_coords传入城市名,GDP,经纬度参数。我们可以看到绘制出来的图中散点分成了10组,每一组代表了2800万亿元人民币。颜色越深,代表GDP越高,颜色越浅,GDP越低。
我们要把图片保存下来,在我们绘制好的图片的右侧,有三个图标,有一个下载的标志,点击这个标志,可以将图片下载为png格式的。
除此之外,我们还可以将图片保存为html格式,可以实现更好的可视化操作。
我们可以使用render将图片保存为html格式。
geo.render(path="2016年全国各地级市GDP(万亿).html")
我们可以在文件夹找到这个html文件,我们打开它。可以使用鼠标放大缩小,也可以点击不同的分组呈现不同分组的GDP。
可以看到保存为html格式的话其实可以做更多的可视化操作。
我们在左下角的图例里只选中0-2800。
可以看到全国各个地级市的GDP还是0-2800万亿元人民币的最多。
而我们只选择最上面两个的时候。
我们可以看到全国2016年GDP超过22400万亿元人民币的只有两个城市,分别是北京和上海,当然,这两个城市也不算地级市。
如果我们把is_visualmap设置为False,这时候颜色与GDP就没有关系了,所有的点只有一个颜色,我们的图就是全国各个地级市的地理位置。
PS:需要从最开始重新构建一个新的Geo地理坐标系,不然图片不会变化。
如果我们把is_piecewise设置为False,这时候颜色就不是分段显示了,而是按照GDP的大小颜色渐变显示。保存为html格式同样可以进行可视化操作。
这样我们就用pyecharts绘制了全国各个地级市的GDP在地图上的散点图了。