小福利,使用python里面的basemap模块和folium模块制作可视化地图
#首先导入模块 import json,folium,requests import mimetypes import http.client import pandas as pd from folium.plugins import HeatMap from pandas.io.json import json_normalize #载入数据 df=pd.read_excel('D:stockdatacovid-new.xlsx') df_confirm2=pd.read_excel('D:stockdatalocal_covid19.xlsx') df.head() 查看数据 covid2=df.drop(columns=['编码','疫苗','日期'],axis=1)去除不需要的字段 #作图 m=folium.Map(tiles="Stamen Terrain",min_zoom=1.5) m
country_shapes='D:stockdataworld.json' folium.Choropleth( geo_data=country_shapes, min_zoom=2, name='covid-19', data=df, columns=['Country','累计确诊'], fill_color='OrRd', nan_fill_color='black', legend_name='累计确诊', ).add_to(m) m
这里将数据加载到图片上,就可以让不同的区域显示不同的颜色,这里缺少世界地图的json数据,还有经纬度数据,所以展示效果不好。
下面模拟一些坐标数据,做一个热力图展示。
# generated data import numpy as np data = ( np.random.normal(size=(100, 3)) * np.array([[0.1, 0.1, 0.1]]) + np.array([[47.5451, -122.3010, 1]]) ).tolist() data[:3] # HeatMap from folium.plugins import HeatMap m = folium.Map([47.5451, -122.3010], tiles='stamentoner', zoom_start=6) HeatMap(data).add_to(m) # m.save(os.path.join('results', 'Heatmap.html')) m
=====================================
小福利,用python里面的basemap模块做可视化图片
# _*_ coding: utf-8 _*_ __author__ = 'xbr' __date__ = '2019/1/11 14:49' from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt import pandas as pd import numpy as np # 用来正常显示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示负号 plt.rcParams['axes.unicode_minus'] = False # 获取PM2.5数据 df = pd.read_excel(r'D:stockdata20180101PM25-CHINA.xlsx') # 剔除无效值NAN df = df.dropna(axis=0, how='any') lat = np.array(df["lat"][:]) # 获取维度之维度值 lon = np.array(df["lon"][:]) # 获取经度值 PM25 = np.array(df["PM25"][:], dtype=float) # 画图 fig = plt.figure(figsize=(16, 9)) plt.rc('font', size=15, weight='bold') ax = fig.add_subplot(111) # 添加标题,PM2.5下标设置 plt.title(u'2018年01月01日中国地区$mathrm{PM}_{2.5}$质量浓度分布', size=25, weight='bold') # 创建底图,等经纬度投影 mp = Basemap(llcrnrlon=73., llcrnrlat=17., urcrnrlon=135., urcrnrlat=55, projection='cyl', resolution='h') # 添加海岸线 mp.drawcoastlines() # 添加国家行政边界 mp.drawcountries() # 设置colorbar中颜色间隔个数 levels = np.linspace(0, np.max(PM25), 20) # cf = mp.scatter(lon, lat, PM25, marker='o', color='r') # 设置颜色表示数值大小 cf = mp.scatter(lon, lat, PM25, c=PM25, cmap='jet', alpha=0.75) # 设置上下标以及单位的希腊字母 cbar = mp.colorbar(cf, location='right', format='%d', size=0.3, ticks=np.linspace(0, np.max(PM25), 10), label='$mathrm{PM}_{2.5}$($mu$g/$mathrm{m}^{3}$)') plt.show() fig.savefig("first.png")
图片效果
原文地址https://blog.csdn.net/XBR_2014/article/details/88931918
====================================
# _*_ coding: utf-8 _*_ __author__ = 'xbr' __date__ = '2019/1/9 15:47' import numpy as np import pandas as pd import folium import webbrowser from folium.plugins import HeatMap # 读取csv文件,以Dataframe形式保存 # df = pd.read_csv(r"D:stockdataPM25-20180101.csv") df = pd.read_excel(r'D:stockdata20180101PM25-CHINA.xlsx') # 获取数据个数 num = df.shape[0] # 获取纬度 lat = np.array(df["lat"][0:num]) # 获取经度 lon = np.array(df["lon"][0:num]) # 获取PM2.5,转化为numpy浮点型 pm25 = np.array(df["PM25"][0:num], dtype=float) # 将数据制作成[lats, lons, weights]的形式 data1 = [[lat[i], lon[i], pm25[i]] for i in range(num)] # 绘制Map,中心经纬度[32, 120],开始缩放程度是5倍 map_osm = folium.Map(location=[32, 120], zoom_start=5) # 将热力图添加到前面建立的map里 HeatMap(data1).add_to(map_osm) file_path = r"D:AirQualityMap.html" # 保存为html文件 map_osm.save(file_path) # 默认浏览器打开 webbrowser.open(file_path)
图片效果