python中進(jìn)行圖表繪制的庫(kù)主要有兩個(gè):matplotlib 和 pyecharts, 相比較而言:
matplotlib中提供了BaseMap可以用于地圖的繪制,但是個(gè)人覺得其繪制的地圖不太美觀,而且安裝相較而言有點(diǎn)麻煩。
pyecharts是基于百度開源的js庫(kù)echarts而來(lái),其最大的特點(diǎn)是:安裝簡(jiǎn)單、使用也簡(jiǎn)單。
所以決定使用pyecharts來(lái)繪制地圖。
1.安裝pyecharts
如果有anaconda環(huán)境,可用 pip install pyecharts 命令安裝pyecharts。
由于我們要繪制中國(guó)的疫情地圖,所以還要額外下載幾個(gè)地圖。地圖文件被分成了三個(gè)Python包,分別為:
全球國(guó)家地圖: echarts-countries-pypkg
安裝命令:pip install echarts-countries-pypkg
中國(guó)省級(jí)地圖: echarts-china-provinces-pypkg
安裝命令:pip install echarts-china-provinces-pypkg
中國(guó)市級(jí)地圖: echarts-china-cities-pypkg
安裝命令:pip install echarts-china-cities-pypkg
2.導(dǎo)包。
繪制地圖時(shí)我們根據(jù)自己需要導(dǎo)入需要的包,在pyecharts的官方文檔 https://pyecharts.org/#/ 中詳細(xì)列出了繪制各種圖表的的方法及參數(shù)含義,而且提供了各種圖標(biāo)的demo,方便我們更好地使用pyecharts。
1
2
|
from pyecharts.charts import Map from pyecharts import options as opts |
3.代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# 用于保存城市名稱和確診人數(shù) map_data = [] for i in china : print (i) # 獲得省份名稱 province = i[ "name" ] print ( "province:" ,province) province_confirm = i[ "total" ][ "confirm" ] # 保存省份名稱和該省確診人數(shù) map_data.append((i[ "name" ],province_confirm)) c = ( # 聲明一個(gè)map對(duì)象 Map () # 添加數(shù)據(jù) .add( "確診" , map_data, "china" ) # 設(shè)置標(biāo)題和顏色 .set_global_opts(title_opts = opts.TitleOpts(title = "全國(guó)疫情圖" ), visualmap_opts = opts.VisualMapOpts(split_number = 6 ,is_piecewise = True , pieces = [{ "min" : 1 , "max" : 9 , "label" : "1-9人" , "color" : "#ffefd7" }, { "min" : 10 , "max" : 99 , "label" : "10-99人" , "color" : "#ffd2a0" }, { "min" : 100 , "max" : 499 , "label" : "100-499人" , "color" : "#fe8664" }, { "min" : 500 , "max" : 999 , "label" : "500-999人" , "color" : "#e64b47" }, { "min" : 1000 , "max" : 9999 , "label" : "1000-9999人" , "color" : "#c91014" }, { "min" : 10000 , "label" : "10000人及以上" , "color" : "#9c0a0d" } ])) ) # 生成html文件 c.render( "全國(guó)實(shí)時(shí)疫情.html" ) |
運(yùn)行成功后就可以在工程目錄下發(fā)現(xiàn)一個(gè)名為“全國(guó)實(shí)時(shí)疫情”的html文件,打開就可以看到我們繪制的疫情圖啦??!
全部代碼(包含保存到數(shù)據(jù)庫(kù),爬取數(shù)據(jù)、繪制疫情圖):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/usr/bin/env python # -*- coding: utf-8 -*- import json import requests import pymysql # 裝了anaconda的可以pip install pyecharts安裝pyecharts from pyecharts.charts import Map ,Geo from pyecharts import options as opts from pyecharts. globals import GeoType,RenderType # 繪圖包參加網(wǎng)址https://pyecharts.org/#/zh-cn/geography_charts id = 432 coon = pymysql.connect(user = 'root' , password = 'root' , host = '127.0.0.1' , port = 3306 , database = 'yiqing' ,use_unicode = True , charset = "utf8" ) cursor = coon.cursor() url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" resp = requests.get(url) html = resp.json() data = json.loads(html[ "data" ]) time = data[ "lastUpdateTime" ] data_info = time.split( ' ' )[ 0 ] detail_time = time.split( ' ' )[ 1 ] # 獲取json數(shù)據(jù)的全國(guó)省份疫情情況數(shù)據(jù) china = data[ "areaTree" ][ 0 ][ "children" ] # 用于保存城市名稱和確診人數(shù) map_data = [] for i in china : print (i) # 獲得省份名稱 province = i[ "name" ] print ( "province:" ,province) province_confirm = i[ "total" ][ "confirm" ] # 保存省份名稱和該省確診人數(shù) map_data.append((i[ "name" ],province_confirm)) # 各省份下有各市,獲取各市的疫情數(shù)據(jù) for child in i[ "children" ]: print (child) # 獲取城市名稱 city = child[ "name" ] print ( "city:" ,city) # 獲取確診人數(shù) confirm = int (child[ "total" ][ "confirm" ]) # 獲取疑似人數(shù) suspect = int (child[ "total" ][ "suspect" ]) # 獲取死亡人數(shù) dead = int (child[ "total" ][ "dead" ]) # 獲取治愈人數(shù) heal = int (child[ "total" ][ "heal" ]) # 插入數(shù)據(jù)庫(kù)中 cursor.execute( "INSERT INTO city(id,city,confirm,suspect,dead,heal,province,date_info,detail_time) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)" , ( id , city, confirm, suspect, dead, heal, province, data_info, detail_time)) id = id + 1 coon.commit() c = ( # 聲明一個(gè)map對(duì)象 Map () # 添加數(shù)據(jù) .add( "確診" , map_data, "china" ) # 設(shè)置標(biāo)題和顏色 .set_global_opts(title_opts = opts.TitleOpts(title = "全國(guó)疫情圖" ), visualmap_opts = opts.VisualMapOpts(split_number = 6 ,is_piecewise = True , pieces = [{ "min" : 1 , "max" : 9 , "label" : "1-9人" , "color" : "#ffefd7" }, { "min" : 10 , "max" : 99 , "label" : "10-99人" , "color" : "#ffd2a0" }, { "min" : 100 , "max" : 499 , "label" : "100-499人" , "color" : "#fe8664" }, { "min" : 500 , "max" : 999 , "label" : "500-999人" , "color" : "#e64b47" }, { "min" : 1000 , "max" : 9999 , "label" : "1000-9999人" , "color" : "#c91014" }, { "min" : 10000 , "label" : "10000人及以上" , "color" : "#9c0a0d" } ])) ) # 生成html文件 c.render( "全國(guó)實(shí)時(shí)疫情.html" ) # # china_total="確診" + str(data["chinaTotal"]["confirm"])+ "疑似" + str(data["chinaTotal"]["suspect"])+ "死亡" + str(data["chinaTotal"]["dead"]) + "治愈" + str(data["chinaTotal"]["heal"]) + "更新日期" + data["lastUpdateTime"] # print(china_total) |
以上就是python如何繪制疫情圖的詳細(xì)內(nèi)容,更多關(guān)于python繪制疫情圖的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!
原文鏈接:https://www.cnblogs.com/qilin20/p/12347830.html