
作者:俊欣
來源:關于數據分析與可視化
說到Python當中的可視化模塊,相信大家用的比較多的還是matplotlib、seaborn等模塊,今天小編來嘗試用Plotly模塊為大家繪制可視化圖表,和前兩者相比,用Plotly模塊會指出來的可視化圖表有著很強的交互性。
我們先導入后面需要用到的模塊并且生成一批假數據,
import numpy as np
import plotly.graph_objects as go
# create dummy data
vals = np.ceil(100 * np.random.rand(5)).astype(int)
keys = ["A", "B", "C", "D", "E"]
我們基于所生成的假數據來繪制柱狀圖,代碼如下
fig = go.Figure()
fig.add_trace(
go.Bar(x=keys, y=vals)
fig.update_layout(height=600, width=600)
fig.show()
output
可能讀者會感覺到繪制出來的圖表略顯簡單,我們再來完善一下,添加上標題和注解,代碼如下
# create figure
fig = go.Figure()
# 繪制圖表
fig.add_trace(
go.Bar(x=keys, y=vals, hovertemplate="<b>Key:</b> %{x}<br><b>Value:</b> %{y}<extra></extra>")
# 更新完善圖表
fig.update_layout(
font_family="Averta",
hoverlabel_font_family="Averta",
title_text="直方圖",
xaxis_title_text="X軸-鍵",
xaxis_title_font_size=18,
xaxis_tickfont_size=16,
yaxis_title_text="Y軸-值",
yaxis_title_font_size=18,
yaxis_tickfont_size=16,
hoverlabel_font_size=16,
height=600,
width=600
fig.show()
output
例如我們有多組數據想要繪制成柱狀圖的話,我們先來創建好數據集
vals_2 = np.ceil(100 * np.random.rand(5)).astype(int)
vals_3 = np.ceil(100 * np.random.rand(5)).astype(int)
vals_array = [vals, vals_2, vals_3]
然后我們遍歷獲取列表中的數值并且繪制成條形圖,代碼如下
# 生成畫布
fig = go.Figure()
# 繪制圖表
for i, vals in enumerate(vals_array):
fig.add_trace(
go.Bar(x=keys, y=vals, name=f"Group {i+1}", hovertemplate=f"<b>Group {i+1}</b><br><b>Key:</b> %{{x}}<br><b>Value:</b> %{{y}}<extra></extra>")
# 完善圖表
fig.update_layout(
barmode="group",
fig.show()
output
而我們想要變成堆積狀的條形圖,只需要修改代碼中的一處即可,將fig.update_layout(barmode="group")修改成fig.update_layout(barmode="group")即可,我們來看一下出來的樣子
箱型圖在數據統計分析當中也是應用相當廣泛的,我們先來創建兩個假數據
# create dummy data for boxplots
y1 = np.random.normal(size=1000)
y2 = np.random.normal(size=1000)
我們將上面生成的數據繪制成箱型圖,代碼如下
# 生成畫布
fig = go.Figure()
# 繪制圖表
fig.add_trace(
go.Box(y=y1, name="Dataset 1"),
fig.add_trace(
go.Box(y=y2, name="Dataset 2"),
fig.update_layout(
fig.show()
output
接下來我們嘗試來繪制一張散點圖,也是一樣的步驟,我們想嘗試生成一些假數據,代碼如下
x = [i for i in range(1, 10)]
y = np.ceil(1000 * np.random.rand(10)).astype(int)
然后我們來繪制散點圖,調用的是Scatter()方法,代碼如下
# create figure
fig = go.Figure()
fig.add_trace(
go.Scatter(x=x, y=y, mode="markers", hovertemplate="<b>x:</b> %{x}<br><b>y:</b> %{y}<extra></extra>")
fig.update_layout(
fig.show()
output
那么氣泡圖的話就是在散點圖的基礎上,根據數值的大小來設定散點的大小,我們再來創建一些假數據用來設定散點的大小,代碼如下
s = np.ceil(30 * np.random.rand(5)).astype(int)
我們將上面用作繪制散點圖的代碼稍作修改,通過marker_size參數來設定散點的大小,如下所示
fig = go.Figure()
fig.add_trace(
go.Scatter(x=x, y=y, mode="markers", marker_size=s, text=s, hovertemplate="<b>x:</b> %{x}<br><b>y:</b> %{y}<br><b>Size:</b> %{text}<extra></extra>")
fig.update_layout(
fig.show()
output
直方圖相比較于上面提到的幾種圖表,總體上來說會稍微有點丑,但是通過直方圖,讀者可以更加直觀地感受到數據的分布,我們先來創建一組假數據,代碼如下
## 創建假數據
data = np.random.normal(size=1000)
然后我們來繪制直方圖,調用的是Histogram()方法,代碼如下
# 創建畫布
fig = go.Figure()
# 繪制圖表
fig.add_trace(
go.Histogram(x=data, hovertemplate="<b>Bin Edges:</b> %{x}<br><b>Count:</b> %{y}<extra></extra>")
fig.update_layout(
height=600,
width=600
fig.show()
output
我們再在上述圖表的基礎之上再進行進一步的格式優化,代碼如下
# 生成畫布
fig = go.Figure()
# 繪制圖表
fig.add_trace(
go.Histogram(x=data, histnorm="probability", hovertemplate="<b>Bin Edges:</b> %{x}<br><b>Count:</b> %{y}<extra></extra>")
fig.update_layout(
fig.show()
output
相信大家都知道在matplotlib模塊當中的subplots()方法可以將多個子圖拼湊到一塊兒,那么同樣地在plotly當中也可以同樣地將多個子圖拼湊到一塊兒,調用的是plotly模塊當中make_subplots函數
from plotly.subplots import make_subplots
## 2行2列的圖表
fig = make_subplots(rows=2, cols=2)
## 生成一批假數據用于圖表的繪制
x = [i for i in range(1, 11)]
y = np.ceil(100 * np.random.rand(10)).astype(int)
s = np.ceil(30 * np.random.rand(10)).astype(int)
y1 = np.random.normal(size=5000)
y2 = np.random.normal(size=5000)
接下來我們將所要繪制的圖表添加到add_trace()方法當中,代碼如下
# 繪制圖表
fig.add_trace(
go.Bar(x=x, y=y, hovertemplate="<b>x:</b> %{x}<br><b>y:</b> %{y}<extra></extra>"),
row=1, col=1
fig.add_trace(
go.Histogram(x=y1, hovertemplate="<b>Bin Edges:</b> %{x}<br><b>Count:</b> %{y}<extra></extra>"),
row=1, col=2
fig.add_trace(
go.Scatter(x=x, y=y, mode="markers", marker_size=s, text=s, hovertemplate="<b>x:</b> %{x}<br><b>y:</b> %{y}<br><b>Size:</b> %{text}<extra></extra>"),
row=2, col=1
fig.add_trace(
go.Box(y=y1, name="Dataset 1"),
row=2, col=2
fig.add_trace(
go.Box(y=y2, name="Dataset 2"),
row=2, col=2
fig.update_xaxes(title_font_size=18, tickfont_size=16)
fig.update_yaxes(title_font_size=18, tickfont_size=16)
fig.update_layout(
fig.show()
output
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25