记录一下一天的辛酸画图历程
1、Folium 热力图一开始是别人要求根据经纬度和ratio这个指标画一个热图,我就直接拿folium画了一个,还挺好看的,不过放大来看就发现,这些区域的颜色深浅一部分是根据数据密度,一部分是根据ratio的大小,而ratio的差距也不是很大,所以颜色深浅的主要因素就是各个区域点的密度,这就和要求不符,所以开始查资料。最终发现要在图上只想体现ratio值大小的话,只能根据经纬度画散点图,然后再根据值的大小上色。这里也放一下folium 的热力图代码。
###根据经纬度画热力图 import folium import webbrowser from folium.plugins import HeatMap #首先保证导入的数据框brother_ratio中有维度和经度以及ratio的数据 LAT_new = brother_ratio['LATNUM'] #纬度 LNG_new = brother_ratio['LONGNUM'] #经度 #拼接成list data1 = [[brother_ratio['LATNUM'][i],brother_ratio['LONGNUM'][i], brother_ratio['ratio'][i]] for i in range(len(brother_ratio))] #计算中心点,也可以自定义 Center=[np.mean(np.array(LAT_new,dtype='float32')),np.mean(np.array(LNG_new,dtype='float32'))] #初始化地图 m=folium.Map(location=Center,zoom_start=6) #热力图 HeatMap(data1,radius = 15).add_to(m) name='ratio_data.html' #文件名 m.save(name) #保存热力图文件 #将结果文件打开进行显示 webbrowser.open(name,new=2)2、Geo 散点图
这里直接上官方文档,已经写得很清晰了:https://gallery.pyecharts.org/#/Geo/geo_base
from pyecharts import options as opts from pyecharts.charts import Geo from pyecharts.faker import Faker c = ( Geo() .add_schema(maptype="china") .add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())]) .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts( visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-基本示例") ) .render("geo_base.html") )
但是这里的 maptype="china",也就是用的是中国地图。如果需要的是其他国家的地图,也可以换成对应国家的名称。这里有个坑,我换瑞士、英国、美国等国家的都没事,但是恰恰我需要的是印度尼西亚的地图,而我把maptype="印度尼西亚",maptype="印尼"都没用。找遍全网也没有解决办法,只能去看官方文档,217 countries and regions,这里就包含了217个国家的地图资源。
别的国家都一个名字,就印尼写两个????而且切记两个名字之间要写英文的逗号加空格 ,也就是 印度尼西亚, 印尼。至此,代码就差不多了,下面贴下完整代码。
from pyecharts.charts import Geo from pyecharts import options as opts import pandas as pd df = pd.read_csv('ratio.csv') geo_cities_coords={df.iloc[i,0]:[df.iloc[i]['LONGNUM'],df.iloc[i]['LATNUM']] for i in range(len(df))} attr=list(df.iloc[:,0]) value=list(df['ratio']) data_pair=[(df.iloc[i,0],df.iloc[i]['ratio']) for i in range(len(df))] geo = Geo() geo.add_schema(maptype="印度尼西亚, 印尼") for key,value in geo_cities_coords.items(): geo.add_coordinate(key,value[0],value[1]) # geo.add('',data_pair,symbol_size=10,itemstyle_opts=opts.ItemStyleOpts(color="blue")) geo.add('',data_pair,symbol_size=5) # 设置样式 # geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False),type='effectScatter') geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False),type='scatter') # is_piecewise 是否自定义分段, 变为true 才能生效 geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_ = 1), title_opts=opts.TitleOpts(title="ratio")) geo.render()
这里有个变量要注意,opts.VisualMapOpts(max_ = 1),里面的max_默认值是100,也就是刻度的最大值。但是我的ratio最大是1,如果用默认最大值那所有点的颜色就一样了。
最终得到一个render.html文件,如下图
没有热力图好看,但目前也找不到符合要求的画法了,如果有大佬知道更好的方法请指教。
参考文献1、pyecharts绘制地理散点图
2、[pyecharts学习笔记]——全局配置项(VisualMapOpts视觉映射配置项)
3、Python pyecharts.geo绘制美国地图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)