# Python中怎么利用pyecharts實現數據可視化
## 一、pyecharts概述
### 1.1 什么是pyecharts
pyecharts是一個基于Echarts的Python可視化庫,它允許開發者使用Python代碼生成Echarts風格的交互式圖表。Echarts是百度開源的一個優秀的數據可視化庫,而pyecharts則是Echarts的Python接口,使得Python開發者能夠更方便地創建各種精美的圖表。
### 1.2 pyecharts的特點
- **豐富的圖表類型**:支持折線圖、柱狀圖、散點圖、餅圖、雷達圖等30+種圖表
- **高度可定制化**:可以自定義顏色、標簽、提示框等幾乎所有圖表元素
- **交互性強**:支持縮放、拖拽、數據篩選等交互功能
- **多端適配**:生成的圖表可以在Jupyter Notebook、Web頁面等多種環境中展示
- **簡單易用**:通過簡潔的Python API即可創建復雜圖表
### 1.3 安裝pyecharts
安裝pyecharts非常簡單,使用pip命令即可:
```bash
pip install pyecharts
如果需要使用地圖相關功能,還需要安裝額外的地圖包:
pip install echarts-countries-pypkg # 全球國家地圖
pip install echarts-china-provinces-pypkg # 中國省級地圖
pip install echarts-china-cities-pypkg # 中國市級地圖
讓我們從一個簡單的柱狀圖開始:
from pyecharts.charts import Bar
# 創建柱狀圖對象
bar = Bar()
# 添加x軸數據
bar.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"])
# 添加y軸數據
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# 渲染圖表到HTML文件
bar.render("my_first_chart.html")
這段代碼會生成一個簡單的柱狀圖,并保存為HTML文件。在瀏覽器中打開這個文件,你將看到一個交互式的柱狀圖。
pyecharts提供了豐富的配置選項,我們可以通過set_global_opts
方法設置圖表的全局選項:
from pyecharts import options as opts
bar = Bar()
bar.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.add_yaxis("商家B", [15, 6, 45, 20, 35, 66])
# 設置全局配置
bar.set_global_opts(
title_opts=opts.TitleOpts(title="商品銷售情況", subtitle="2023年1月"),
toolbox_opts=opts.ToolboxOpts(), # 顯示工具箱
legend_opts=opts.LegendOpts(pos_left="right"), # 圖例位置
xaxis_opts=opts.AxisOpts(name="商品"), # x軸名稱
yaxis_opts=opts.AxisOpts(name="銷量") # y軸名稱
)
bar.render("bar_with_options.html")
pyecharts支持多種展示方式:
chart.render("output.html")
chart.render_notebook()
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot
make_snapshot(snapshot, chart.render(), "output.png")
折線圖適合展示數據隨時間或有序類別的變化趨勢:
from pyecharts.charts import Line
line = Line()
line.add_xaxis(["周一", "周二", "周三", "周四", "周五", "周六", "周日"])
line.add_yaxis("最高溫度", [11, 11, 15, 13, 12, 13, 10])
line.add_yaxis("最低溫度", [1, -2, 2, 5, 3, 2, 0])
line.set_global_opts(
title_opts=opts.TitleOpts(title="一周溫度變化"),
tooltip_opts=opts.TooltipOpts(trigger="axis"),
yaxis_opts=opts.AxisOpts(
name="溫度(℃)",
splitline_opts=opts.SplitLineOpts(is_show=True)
)
)
line.render("temperature_line.html")
柱狀圖適合比較不同類別間的數值大?。?/p>
bar = Bar()
bar.add_xaxis(["2017", "2018", "2019", "2020", "2021", "2022"])
bar.add_yaxis("產品A", [100, 200, 300, 400, 500, 600])
bar.add_yaxis("產品B", [200, 300, 400, 500, 600, 700])
bar.set_global_opts(
title_opts=opts.TitleOpts(title="年度銷售對比"),
datazoom_opts=[opts.DataZoomOpts()] # 添加數據縮放
)
bar.render("sales_bar.html")
餅圖適合展示各部分占總體的比例:
from pyecharts.charts import Pie
pie = Pie()
pie.add(
"",
[("電子產品", 45), ("服裝", 30), ("食品", 25)],
radius=["40%", "75%"], # 設置環狀
label_opts=opts.LabelOpts(formatter=": {c} ({d}%)")
)
pie.set_global_opts(
title_opts=opts.TitleOpts(title="銷售占比"),
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%")
)
pie.render("sales_pie.html")
散點圖適合展示兩個變量之間的關系:
from pyecharts.charts import Scatter
scatter = Scatter()
scatter.add_xaxis([10, 20, 30, 40, 50, 60])
scatter.add_yaxis("", [10, 20, 30, 40, 50, 60])
scatter.set_global_opts(
title_opts=opts.TitleOpts(title="散點圖示例"),
visualmap_opts=opts.VisualMapOpts(max_=60)
)
scatter.render("scatter_plot.html")
pyecharts支持多種地圖展示:
from pyecharts.charts import Map
data = [
("北京", 100), ("上海", 200), ("廣東", 300),
("浙江", 150), ("江蘇", 180), ("四川", 120)
]
map_chart = Map()
map_chart.add("", data, "china")
map_chart.set_global_opts(
title_opts=opts.TitleOpts(title="中國地圖示例"),
visualmap_opts=opts.VisualMapOpts(max_=300)
)
map_chart.render("china_map.html")
pyecharts支持將多個圖表組合在一起展示:
from pyecharts.charts import Bar, Line, Grid
bar = (
Bar()
.add_xaxis(["周一", "周二", "周三", "周四", "周五", "周六", "周日"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90, 50])
.add_yaxis("商家B", [15, 6, 45, 20, 35, 66, 30])
.set_global_opts(title_opts=opts.TitleOpts(title="Grid-Bar"))
)
line = (
Line()
.add_xaxis(["周一", "周二", "周三", "周四", "周五", "周六", "周日"])
.add_yaxis("平均溫度", [20, 22, 25, 18, 21, 23, 19])
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%")
)
)
grid = Grid()
grid.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
grid.add(line, grid_opts=opts.GridOpts(pos_top="60%"))
grid.render("grid_example.html")
時間軸可以展示數據隨時間的變化:
from pyecharts.charts import Timeline, Bar
tl = Timeline()
for year in range(2018, 2023):
bar = (
Bar()
.add_xaxis(["產品A", "產品B", "產品C"])
.add_yaxis("銷量", [year*10, year*15, year*8])
.set_global_opts(title_opts=opts.TitleOpts(f"{year}年銷售情況"))
)
tl.add(bar, str(year))
tl.render("timeline_example.html")
pyecharts支持3D圖表展示:
from pyecharts.charts import Bar3D
data = [
[0, 0, 5], [0, 1, 10], [0, 2, 15],
[1, 0, 8], [1, 1, 12], [1, 2, 18],
[2, 0, 6], [2, 1, 14], [2, 2, 20]
]
bar3d = Bar3D()
bar3d.add(
"",
data,
xaxis3d_opts=opts.Axis3DOpts(type_="category", data=["Q1", "Q2", "Q3"]),
yaxis3d_opts=opts.Axis3DOpts(type_="category", data=["2018", "2019", "2020"]),
zaxis3d_opts=opts.Axis3DOpts(type_="value")
)
bar3d.set_global_opts(
title_opts=opts.TitleOpts(title="3D柱狀圖示例"),
visualmap_opts=opts.VisualMapOpts(max_=20)
)
bar3d.render("bar3d_example.html")
pyecharts支持多種內置主題,也可以自定義主題:
from pyecharts.globals import ThemeType
# 使用內置主題
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
bar.add_xaxis(["A", "B", "C", "D", "E"])
bar.add_yaxis("系列1", [10, 20, 30, 40, 50])
bar.render("dark_theme.html")
假設我們有一份銷售數據,我們可以用多種圖表進行分析:
import pandas as pd
from pyecharts.charts import Bar, Pie, Line
# 模擬銷售數據
sales_data = {
"月份": ["1月", "2月", "3月", "4月", "5月", "6月"],
"產品A": [120, 132, 101, 134, 90, 230],
"產品B": [220, 182, 191, 234, 290, 330],
"產品C": [150, 232, 201, 154, 190, 330]
}
df = pd.DataFrame(sales_data)
# 1. 各產品總銷售額餅圖
pie = Pie()
pie.add(
"",
[("產品A", df["產品A"].sum()),
("產品B", df["產品B"].sum()),
("產品C", df["產品C"].sum())],
radius=["40%", "75%"]
)
pie.set_global_opts(title_opts=opts.TitleOpts(title="產品銷售額占比"))
pie.render("sales_pie.html")
# 2. 各月銷售趨勢折線圖
line = Line()
line.add_xaxis(df["月份"].tolist())
line.add_yaxis("產品A", df["產品A"].tolist())
line.add_yaxis("產品B", df["產品B"].tolist())
line.add_yaxis("產品C", df["產品C"].tolist())
line.set_global_opts(title_opts=opts.TitleOpts(title="月度銷售趨勢"))
line.render("sales_line.html")
分析用戶訪問網站的時段分布:
from pyecharts.charts import Radar
# 模擬用戶訪問數據
hour_data = {
"時段": ["0-3", "3-6", "6-9", "9-12", "12-15", "15-18", "18-21", "21-24"],
"訪問量": [100, 50, 200, 400, 350, 300, 450, 250]
}
# 雷達圖展示
radar = Radar()
radar.add_schema(
schema=[
opts.RadarIndicatorItem(name="0-3", max_=500),
opts.RadarIndicatorItem(name="3-6", max_=500),
opts.RadarIndicatorItem(name="6-9", max_=500),
opts.RadarIndicatorItem(name="9-12", max_=500),
opts.RadarIndicatorItem(name="12-15", max_=500),
opts.RadarIndicatorItem(name="15-18", max_=500),
opts.RadarIndicatorItem(name="18-21", max_=500),
opts.RadarIndicatorItem(name="21-24", max_=500)
]
)
radar.add("訪問量", [hour_data["訪問量"]])
radar.set_global_opts(title_opts=opts.TitleOpts(title="用戶訪問時段分布"))
radar.render("user_radar.html")
pyecharts作為Python中強大的數據可視化工具,具有以下優勢:
在實際應用中,我們可以根據數據類型和分析目的選擇合適的圖表類型:
通過本文的介紹,相信讀者已經掌握了pyecharts的基本用法和一些高級技巧。在實際項目中,可以結合具體業務需求,靈活運用pyecharts的各種功能,創建出既美觀又實用的數據可視化作品。
希望本文能幫助您更好地利用pyecharts進行數據可視化,讓數據講述更生動的故事! “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。