【Python】pyecharts 数据可视化模块
文章目錄
- 1. pyecharts 模塊介紹
- 2. pyecharts 模塊安裝
- 3. pyecharts 配置選項
- 3.1 全局配置選項
- 3.2 系列配置選項
- 4. 基礎折線圖的構建
- 4.1 基本使用流程
- 4.2 實現2020年美印日確診人數對比折線圖
- 5. 基礎地圖構建
- 5.1 基本使用流程
- 5.2 實現國內疫情地圖
- 5.3 實現省級疫情地圖
- 6. 基礎柱狀圖構建
- 6.1 基本使用流程
- 6.2 基礎時間線柱狀圖
- 6.3 實現動態 GDP 柱狀圖
1. pyecharts 模塊介紹
Echarts 是一個由百度開源的數據可視化,憑借著良好的交互性,精巧的圖表設計,得到了眾多開發者的認可。而 Python 是一門富有表達力的語言,很適合用于數據處理。當數據分析遇上數據可視化時,pyecharts 誕生了。
pyecharts 官網:https://pyecharts.org/#/zh-cn/
pyecharts 畫廊地址:https://gallery.pyecharts.org/#/README
2. pyecharts 模塊安裝
pip install pyecharts3. pyecharts 配置選項
pyecharts 模塊中有很多配置選項,常用到兩個類別的選項:全局配置選項和系列配置選項。
3.1 全局配置選項
全局配置選項可以通過 set_global_opts 方法來進行配置,通常對圖表的一些通用的基礎的元素進行配置,例如標題、圖例、工具箱、鼠標移動效果等等,它們與圖表的類型無關。
示例代碼:通過折線圖對象對折線圖進行全局配置
from pyecharts.charts import Line from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts# 獲取折線圖對象 line = Line()# 對折線圖進行全局配置 line.set_global_opts(# 設置標題、標題的位置...title_opts=TitleOpts("國家GDP展示", pos_left="center", pos_bottom="1%"),# 設置圖例是展示的...legend_opts=LegendOpts(is_show=True),# 設置工具箱是展示的toolbox_opts=ToolboxOpts(is_show=True),# 設置視覺映射是展示的visualmap_opts=VisualMapOpts(is_show=True) )3.2 系列配置選項
系列配置選項是針對某個具體的參數進行配置,可以去 pyecharts 官網進行了解。
4. 基礎折線圖的構建
4.1 基本使用流程
導包,導入 Line 功能構建折線圖對象
from pyecharts.charts import Line from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts獲取折線圖對象
line = Line()添加 x、y 軸數據(添加系列配置)
line.add_xaxis(["中國", "美國", "英國"]) line.add_yaxis("GDP", [30, 20, 10])添加全局配置
line.set_global_opts(# 設置標題、標題的位置...title_opts=TitleOpts("國家GDP展示", pos_left="center", pos_bottom="1%"),# 設置圖例是展示的...legend_opts=LegendOpts(is_show=True),# 設置工具箱是展示的toolbox_opts=ToolboxOpts(is_show=True),# 設置視覺映射是展示的visualmap_opts=VisualMapOpts(is_show=True) )生成圖表(通過 render 方法將代碼生成圖像)
line.render()4.2 實現2020年美印日確診人數對比折線圖
import json from pyecharts.charts import Line# 獲取不同國家疫情時間 from pyecharts.options import TitleOpts, LabelOptsdef getdata(file):# 處理數據try:f = open(file, 'r', encoding='utf8')except FileNotFoundError as e:print(f"文件不存在,具體錯誤為:{e}")else:data = f.read()# JSON 轉 Python 字典dict = json.loads(data)# 獲取 trendtrend_data = dict['data'][0]['trend']# 獲取日期數據,用于 x 軸(只拿2020年的數據)x_data = trend_data['updateDate'][:314]# 獲取確認數據,用于 y 軸y_data = trend_data['list'][0]['data'][:314]# 返回結果return x_data, y_datafinally:f.close()# 獲取美國數據 us_x_data, us_y_data = getdata("E:\\折線圖數據\\美國.txt")# 獲取印度數據 in_x_data, in_y_data = getdata("E:\\折線圖數據\\印度.txt")# 獲取日本數據 jp_x_data, jp_y_data = getdata("E:\\折線圖數據\\日本.txt")# 生成圖表 line = Line()# 添加 x 軸數據(日期,公用數據,不同國家都一樣) line.add_xaxis(us_x_data)# 添加 y 軸數據(設置 y 軸的系列配置,將標簽不顯示) line.add_yaxis("美國確診人數", us_y_data, label_opts=LabelOpts(is_show=False)) # 添加美國數據 line.add_yaxis("印度確診人數", in_y_data, label_opts=LabelOpts(is_show=False)) # 添加印度數據 line.add_yaxis("日本確診人數", jp_y_data, label_opts=LabelOpts(is_show=False)) # 添加日本數據# 配置全局選項 line.set_global_opts(# 設置標題title_opts=TitleOpts("2020年美日印三國確診人數對比折線圖", pos_left="center", pos_bottom="1%"),)# 生成圖表 line.render()5. 基礎地圖構建
5.1 基本使用流程
導包,導入 Map 功能獲取地圖對象
from pyecharts.charts import Map from pyecharts.options import VisualMapOpts獲取地圖對象
map = Map()準備好數據
data = [("北京", 99),("上海", 199),("廣州", 299),("湖南", 199),("安徽", 99),("湖北", 399), ]添加數據到地圖對象中
# 地圖名稱、傳入的數據、地圖類型(默認是中國地圖) map,add("地圖", data, "china")添加全局配置
map.set_global_opts(# 設置視覺映射配置visualmap_opts=VisualMapOpts(# 打開視覺映射(可能不精準,因此可以開啟手動校準)is_show=True,# 開啟手動校準范圍is_piecewise=True,# 設置要校準參數的具體范圍pieces=[{"min": 1, "max": 9, "label": "1~9人", "color": "#CCFFFF"},{"min": 10, "max": 99, "label": "10~99人", "color": "#FFFF99"},{"min": 100, "max": 199, "label": "100~199人", "color": "#FF9966"},{"min": 200, "max": 299, "label": "200~299人", "color": "#FF6666"},{"min": 300, "label": "300人以上", "color": "#CC3333"},]) )生成地圖
map.render()5.2 實現國內疫情地圖
import json from pyecharts.charts import Map from pyecharts.options import VisualMapOpts, TitleOpts, LegendOpts# 讀取數據 f = open("E:\\地圖數據\\疫情.txt", 'r', encoding='utf8') str_json = f.read()# 關閉文件 f.close()# JSON 轉 python 字典 data_dict = json.loads(str_json)# 取到各省數據 province_data_list = data_dict['areaTree'][0]['children']# 組裝每個省份和確診人數為元組,并封裝到列表內 data_list = [] for province_data in province_data_list:province_name = province_data['name']province_total_confirm = province_data['total']['confirm']data_list.append((province_name, province_total_confirm))# 創建地圖對象 map = Map()# 添加數據 map.add("各省確診總人數", data_list, "china")# 設置全局配置,定制分段的視覺映射 map.set_global_opts(title_opts=TitleOpts('全國疫情地圖', pos_left='center', pos_bottom='1%'),legend_opts=LegendOpts(is_show=True),visualmap_opts=VisualMapOpts(is_show=True,is_piecewise=True,pieces=[{"min": 1, "max": 9, "label": "1~9人", "color": "#CCFFFF"},{"min": 10, "max": 99, "label": "10~99人", "color": "#FFFF99"},{"min": 100, "max": 499, "label": "100~499人", "color": "#FF9966"},{"min": 500, "max": 999, "label": "500~999人", "color": "#FF6666"},{"min": 1000, "max": 9999, "label": "1000~9999人", "color": "#CC3333"},{"min": 10000, "label": "10000人以上", "color": "#990033"}]) )# 繪圖 map.render()5.3 實現省級疫情地圖
import json from pyecharts.charts import Map from pyecharts.options import VisualMapOpts, TitleOpts, LegendOpts# 讀取數據 f = open("E:\\地圖數據\\疫情.txt", 'r', encoding='utf8') str_json = f.read()# 關閉文件 f.close()# JSON 轉 python 字典 data_dict = json.loads(str_json)# 取到河南省數據 city_data_list = data_dict['areaTree'][0]['children'][3]['children']# 組裝每個市和確診人數為元組,并封裝到列表內 data_list = [] for city_data in city_data_list:city_name = city_data['name'] + "市"city_total_confirm = city_data['total']['confirm']data_list.append((city_name, city_total_confirm))# 創建地圖對象 map = Map()# 添加數據 map.add("各市確診總人數", data_list, "河南")# 設置全局配置,定制分段的視覺映射 map.set_global_opts(title_opts=TitleOpts('河南省疫情地圖', pos_left='center', pos_bottom='1%'),legend_opts=LegendOpts(is_show=True),visualmap_opts=VisualMapOpts(is_show=True,is_piecewise=True,pieces=[{"min": 1, "max": 9, "label": "1~9人", "color": "#CCFFFF"},{"min": 10, "max": 99, "label": "10~99人", "color": "#FFFF99"},{"min": 100, "max": 499, "label": "100~499人", "color": "#FF9966"},{"min": 500, "max": 999, "label": "500~999人", "color": "#FF6666"},{"min": 1000, "max": 9999, "label": "1000~9999人", "color": "#CC3333"},{"min": 10000, "label": "10000人以上", "color": "#990033"}]) )# 繪圖 map.render()6. 基礎柱狀圖構建
6.1 基本使用流程
導包,導入 Bar 功能獲取地圖對象
from pyecharts.charts import Bar from pyecharts.options import *獲取地圖對象
bar = Bar()添加 x 和 y 軸數據
# 添加 x 軸數據 bar.add_xaxis(["中國", "英國", "美國"]) # 添加 y 軸數據 bar.add_yaxis("GDP", [30, 20, 10])添加全局配置
bar.set_global_opts(title_opts=TitleOpts("基礎柱狀圖", pos_left='center', pos_bottom='1%') )生成地圖
bar.render()反轉 xy 軸
bar.reversal_axis()將數值標簽添設置到右側
bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position='right'))6.2 基礎時間線柱狀圖
柱狀圖描述的是分類數據,但很難動態的描述一個趨勢性的數據,為此 pyecharts 中提供了一種解決方案時間線。
如果說一個 Bar、Line 對象是一張圖表的話,時間線就是創建一個一維的 x 軸,軸上的每一個點就是一個圖表對象。
創建時間線的基礎流程:
導包,導入時間線 Timeline
from pyecharts.charts import Bar, Timeline from pyecharts.options import *準備好圖表對象并添加好數據
bar1 = Bar() bar1.add_xaxis(["中國", "英國", "美國"]) bar1.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position='right')) bar1.reversal_axis()bar2 = Bar() bar2.add_xaxis(["中國", "英國", "美國"]) bar2.add_yaxis("GDP", [50, 20, 30], label_opts=LabelOpts(position='right')) bar2.reversal_axis()bar3 = Bar() bar3.add_xaxis(["中國", "英國", "美國"]) bar3.add_yaxis("GDP", [60, 30, 40], label_opts=LabelOpts(position='right')) bar3.reversal_axis()創建時間線對象 Timeline
timeline = Timeline()將圖表添加到 Timeline 對象中
# 添加圖表到時間線中(圖表對象,點名稱) timeline.add(bar1, "2020年GDP") timeline.add(bar2, "2021年GDP") timeline.add(bar3, "2022年GDP")通過時間線繪圖
timeline.render()設置自動播放
timeline.add_schema(play_interval=1000, # 自動播放的時間間隔,單位毫秒is_timeline_show=True, # 是否顯示自動播放的時候,顯示時間線(默認 True)is_auto_play=True, # 是否在自動播放(默認 False)is_loop_play=True # 是否循環自動播放(默認 True) )設置時間線主題
# 導入 ThemeType from pyecharts.globals import ThemeType# 創建時間線對象時,設置主題參數 timeline = Timeline({"theme": ThemeType.DARK})主題參數如下:
6.3 實現動態 GDP 柱狀圖
import json from pyecharts.charts import Bar, Timeline from pyecharts.options import * from pyecharts.globals import ThemeType# 讀取數據 f = open("E:\\動態柱狀圖數據\\1960-2019全球GDP數據.csv", 'r', encoding='GB2312') data_lines = f.readlines()# 關閉文件 f.close()# 刪除第一條數據 data_lines.pop(0)# 將數據轉化為字典才能出,格式為 {年份1: [[國家1, GDP], [國家2, GDP]], 年份2: [國家, GDP], ...} data_dict = dict()for line in data_lines:year = int(line.split(',')[0]) # 年份country = line.split(',')[1] # 國家gdp = float(line.split(',')[2]) # gdp 數據,通過 float 強制轉換可以把帶有科學計數法的數字轉換為普通數字try: # 如果 key 不存在,則會拋出異常 KeyErrordata_dict[year].append([country, gdp])except KeyError:data_dict[year] = [[country, gdp]]# 排序年份(字典對象的 key 可能是無序的) sorted_year_list = sorted(data_dict.keys())# 創建時間線對象 timeline = Timeline({"theme": ThemeType.LIGHT})# 組裝數據到 Bar 對象中,并添加到 timeline 中 for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1], reverse=True)# 該年份GDP前八的國家year_data = data_dict[year][:8]x_data = []y_data = []for country_gdp in year_data:x_data.append(country_gdp[0])y_data.append(country_gdp[1] / 100000000)# 創建柱狀圖bar = Bar()x_data.reverse()y_data.reverse()# 添加 x y 軸數據bar.add_xaxis(x_data)bar.add_yaxis("GDP(億)", y_data, label_opts=LabelOpts(position='right'))# 反轉 x y 軸bar.reversal_axis()# 設置每一年的圖表的標題bar.set_global_opts(title_opts=TitleOpts(f"{year}年GDP全球前8國家", pos_left='5%'))# 將 bar 對象添加到 timeline 中timeline.add(bar, year)# 設置自動播放參數 timeline.add_schema(play_interval=1000, # 自動播放的時間間隔,單位毫秒is_timeline_show=True, # 是否顯示自動播放的時候,顯示時間線(默認 True)is_auto_play=True, # 是否在自動播放(默認 False)is_loop_play=True # 是否循環自動播放(默認 True) )# 通過時間線繪圖 timeline.render("1960~2019全球GDP前8國家.html")總結
以上是生活随笔為你收集整理的【Python】pyecharts 数据可视化模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux:dd命令详解(df du命令
- 下一篇: Win11亮度无法调节解决方法(在卸载驱