小福利,使用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:\stockdata\covid-new.xlsx')
df_confirm2=pd.read_excel('D:\stockdata\local_covid19.xlsx')
df.head() 查看数据
covid2=df.drop(columns=['编码','疫苗','日期'],axis=1)去除不需要的字段
#作图
m=folium.Map(tiles="Stamen Terrain",min_zoom=1.5)
m
country_shapes='D:\stockdata\world.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 _*_
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:\stockdata\20180101PM25-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 _*_
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:\stockdata\PM25-20180101.csv")
df = pd.read_excel(r'D:\stockdata\20180101PM25-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)
图片效果