微信公衆号:尤而小屋
作者:Peter
編輯:Peter
一文愛上進階可視化神器Plotly
資料可視化已經逐漸發展和深入到我們生活的各個方面,往往遇到資料分析類的工作,借助可視化的方式來呈現我們的資料和結論,能夠幫助我們更好地了解資料本身的含義和背後隐藏的規律。
資料通常是以圖形或者圖表的形式進行展示,例如Excel表格、柱狀圖、折線圖、餅圖、旭日圖等。
現在出現了很多可視化的工具能夠實作資料圖表的可視化展示,比如Tableau、Power BI等;和python相關的第三方可視化庫也數不勝數,比如很傳統和基礎的matplotlib、pyecharts、Seaborn,還比如D3、Highcharts等。它們有着自己或多或少的使用缺陷:
- 繪制出來的圖形是靜态的:無法實作動态可視化
- 部分軟體需要付費才能使用;否則隻能使用部分基礎功能
- 有些可視化庫涉及到很多前端JavaScript、HTML的知識,上手比較困難
- 配置麻煩:簡單的圖形也需要大量的代碼進行配置
Plotly簡介
Plotly是一款用來做資料分析和可視化的線上平台,功能真的是非常強大,它主要有以下特點:
- 圖形多樣化:線上繪制多種圖形,比如柱狀圖、餅圖、直方圖、餅圖、氣泡圖、桑基圖、股票圖、旭日圖、聯合分布圖、地圖等
- 線上可編輯:Plotly中有線上編輯的平台,可以将生成的圖形儲存到該平台,并進行分享
- 開源免費:Plotly的所有資源都是開源免費的,使用者可直接使用,還可以直接和R、python、MATLAB等軟體或者語言無縫對接
- 圖形動态化:Plotly生成的圖形全部是動态化;Plotly的繪圖最好在Jupyter notebook中進行,能夠很好地顯示動态效果
- 顔色絢麗:在使用Plotly繪制圖形的時候,我們可以進行圖形顔色的設定,Plotly提供了豐富的顔色面闆供選擇
- 代碼量少:Plotly繪圖,尤其是Plotly的進階封裝Plotly_Express,代碼量非常少;一行代碼就能實作多種功能且精美的圖形
- 内置豐富資料集:在Plotly中内置7個不同類型的資料集,友善讀者直接使用内置資料進行學習、使用
- 文檔健全:Plotly官方提供了豐富的文檔資料和案例可免費學習,能夠快速的上手
附錄:在官網中展示了Plotly能夠繪制的部分圖形:https://plotly.com/python/
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CZ2gDMxgTO2EmY3UjMycDZwQWM5UzM4UDMhV2NiZTY08CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
安裝和使用
可視化庫Plotly及子庫的安裝非常簡單,隻需要通過兩條指令:
pip install plotly
pip install plotly_express # 安裝
使用之前先導入:
# 兩種繪圖接口
import plotly_express as px # import plotly.express as px
import plotly.graph_objects as go
上面介紹了兩種Plotly中繪圖的接口:
- plotly_express:通常是簡寫為px
- plotly.graph_objects:通常簡寫為go
内置資料集
在Plotly中内置了非常多的資料集,當我們導入了之後可以直接使用:
1、内置GDP資料集
gapminder = px.data.gapminder()
gapminder.head() # 檢視前5行資料
2、餐廳消費的資料集
tips = px.data.tips()
tips.head()
3、資料領域非常著名的鸢尾花資料集
iris = px.data.iris()
iris.head()
4、一份風力資料集
wind = px.data.wind()
wind.head()
5、選舉結果資料集
election = px.data.election()
election.head() # 顯示前5行資料
上面隻列出了Plotly中的部分資料集,下面的導圖記錄了全部的内置資料作用及其相應的字段,可供使用者免費使用,非常友好:
Plotly繪圖
上面介紹了可視化和Plotly的相關知識,下面将通過各種實際的案例來講解如何利用Plotly繪制相關的可視化圖形。
所有的圖像在Jupyter notebook中都是動态可視化,本文采取的是截圖方式來展示可視化結果。
基礎散點圖
1、繪制基礎的散點圖,如果是直接傳入兩個軸的資料,需要2個參數:
fig = px.scatter( # scatter繪制散點圖
x=[0,2,4,6], # x軸
y=[1,3,5,7] # y軸
)
fig.show()
2、如果是使用pandas中的資料庫DataFrame來繪制圖像:
df = px.data.iris() # 鸢尾花資料集
df.head()
fig = px.scatter(
df, # 資料集
x="sepal_width", # x軸
y="sepal_length" # y軸
)
fig.show()
3、還可以傳入一個顔色參數color,可以選擇字元型或者資料型:
- 字元型資料
fig = px.scatter(
df, # 資料集
x="sepal_width", # x軸
y="sepal_length", # y軸
color="species", # 指定顔色:字元型資料
)
fig.show()
- 數值型資料
fig = px.scatter(
df, # 資料集
x="sepal_width", # x軸
y="sepal_length", # y軸
color="sepal_length" # 指定顔色
)
fig.show()
4、傳入size參數控制每個點的大小,相當于是在制作氣泡圖
gap = px.data.gapminder().query("year == 2002")
fig = px.scatter(
gap # 繪圖資料
,x="gdpPercap" # x軸
,y="lifeExp" # y軸
,color="continent" # 顔色參數
,size="pop" # 點的大小
,size_max=60 # 點的最大值
)
fig.show()
5、散點圖中顯示每個點的資料
x_data = [0,2,4,6,8]
y_data = [1,3,5,7,9]
fig = px.scatter(x=x_data,
y=y_data,
color=x_data, # 顔色設定
text=x_data # 顯示内容
)
fig.update_traces(textposition="top center") # 顯示位置:頂部居中
fig.show()
6、繪制折線圖:折線圖可以了解成散點圖的一種極限形式,下面例子中使用go方法實作
import plotly.graph_objects as go
import numpy as np
np.random.seed(1)
# 生成随機資料
N = 200
random_x = np.linspace(0, 1, N)
random_y0 = np.random.randn(N) + 10
random_y1 = np.random.randn(N)
random_y2 = np.random.randn(N) - 10
# 準備畫布
fig = go.Figure()
# 添加3組不同的資料
fig.add_trace(go.Scatter( #
x=random_x,
y=random_y0,
mode='lines', # mode模式
name='lines')) # 名字
fig.add_trace(go.Scatter(
x=random_x,
y=random_y1,
mode='lines+markers',
name='lines+markers'))
fig.add_trace(go.Scatter(
x=random_x,
y=random_y2,
mode='markers',
name='markers'))
fig.show()
7、繪制3D散點圖
import plotly.express as px
df = px.data.iris()
fig = px.scatter_3d(
df, # 指定資料
x='sepal_length', # 指定xyz
y='sepal_width',
z='petal_width',
color='species') # 指定顔色
fig1.show()
繪制柱狀圖
1、基礎柱狀圖
自行模拟一份資料集:
df1 = pd.DataFrame({
"name": ["小明","小紅","周明","周紅","張三"],
"age": [20,28,18,25,36],
"score": ["150","170","160","168","154"]
})
df1
fig = px.bar(
df1, # 繪圖資料
x="name", # x軸
y="age" # y軸
)
fig.show()
2、加上改變顔色的參數color
fig = px.bar(
df1,
x="name",
y="age",
color="age" # 顔色參數
)
fig.show()
3、設定圖中的懸停資訊
懸停資訊指的是:當我們光标放到圖形上去才會顯示的資訊
第一種是基于px方法實作的懸停資訊:
fig = px.bar(
df1,
x="name",
y="age",
color="age", # 加上顔色參數
hover_data = ['score'] # 懸停參數
)
fig.show()
第二種是基于go方法實作的懸停資訊:
import plotly.graph_objects as go
name = ['Product A', 'Product B', 'Product C']
number = [1200, 1500, 1300]
fig = go.Figure(data=[go.Bar(x=name,
y=number,
hovertext=['20% 市場佔有率 ', '50% 市場佔有率', '30% 市場佔有率'])])
fig.update_traces(marker_color='rgb(15,110,225)', # marker顔色
marker_line_color='rgb(108,48,107)', # 線條顔色
marker_line_width=1.5, # 線寬
opacity=0.6) # 透明度
fig.update_layout(title_text='3種産品市場佔有率對比')
fig.show()
4、x軸标簽傾斜設定
模拟一份新的資料:
information = pd.DataFrame({
"days":["2021年3月1日 星期一",
"2021年3月2日 星期二",
"2021年3月3日 星期三",
"2021年3月4日 星期四",
"2021年3月5日 星期五"],
"number":[400,700,300,500,800]
})
information
預設情況下x軸标簽是水準顯示:
fig = px.bar(
information,
x="days",
y="number")
fig.show() # 預設水準顯示
fig = px.bar(
information,
x="days",
y="number")
fig.update_layout(xaxis_tickangle=-45) # 傾斜角度設定
fig.show() # 結果是向左傾斜
基于go方法實作的x軸标簽傾斜:
import plotly.graph_objects as go
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# 生成畫布對象
fig = go.Figure()
# 添加多個圖形軌迹
fig.add_trace(go.Bar(
x=months,
y=[20, 14, 25, 16, 18, 22, 19, 15, 12, 16, 14, 17],
name='産品A',
marker_color='lightblue' # 顔色的不同表示方法
))
fig.add_trace(go.Bar(
x=months,
y=[19, 14, 22, 14, 16, 19, 15, 14, 10, 12, 12, 16],
name='産品B',
marker_color='#af0110'
))
fig.update_layout(barmode='group', # 柱狀圖模式
xaxis_tickangle=-45 # 傾斜角度
)
fig.show()
5、分組柱狀圖
第一種情況是基于長表形式的分組柱狀圖:
df2 = pd.DataFrame({
"姓名": ["小明","小紅","張三","小明","小紅","張三","小明","小紅","張三"],
"科目":["國文","國文","國文","數學","數學","數學","英語","英語","英語"],
"得分": [58,78,84,90,71,90,64,84,69]
})
df2
fig = px.bar(
df2,
x="姓名",
y="得分",
color="科目")
fig.show()
第二種情況是基于寬表形式的分組柱狀圖:
df3 = pd.DataFrame({
"姓名": ["小明","小紅","張三"],
"國文":[58,78,84],
"數學":[90,71,90],
"英語":[64,84,69]
})
df3
fig = px.bar(
df3,
x="姓名",
y=["國文","數學","英語"],
title="學生成績對比" # 添加标題
)
fig.show()
6、多面柱狀圖
使用的是Plotly中自帶的餐廳消費資料集:
fig = px.bar(
df4, # 帶繪圖資料
x="sex", # x軸
y="total_bill", # y軸
color="smoker", # 顔色的設定
barmode="group", # 柱狀圖4種模式之一
facet_row="time", # 行
facet_col="day", # 列
category_orders={
"day": ["Thur", "Fri", "Sat", "Sun"],
"time": ["Lunch", "Dinner"] # 分類順序設定
}
)
fig.show()
7、改變柱狀圖基準位置
import plotly.graph_objects as go
years = ['2017','2019','2021']
fig = go.Figure()
fig.add_trace(go.Bar(
x=years,
y=[2000, 3000, 5000],
base=[-2000,-3000,-5000], # 基準位置設定
marker_color='crimson',
name='商家A'))
fig.add_trace(go.Bar(
x=years,
y=[3000, 4000, 2000],
base=0, # 預設的基準設定
marker_color='lightslategrey',
name='商家B'
))
fig.show()
8、改變圖例位置和顔色
有時候我們需要改變圖例的顔色和位置,進行如下設定:
import plotly.graph_objects as go
subjects = ["國文","數學","英語","實體","化學","生物"]
fig = go.Figure()
fig.add_trace(go.Bar(
x=subjects, # x軸、y軸資料
y=[90,85,78,90,99,80],
name='周均', # 圖例名稱
marker_color='rgb(15, 83, 109)' # 該組資料顔色
))
fig.add_trace(go.Bar(
x=subjects,
y=[80,89,68,100,78,90],
name='小明',
marker_color='rgb(180, 118, 255)'
))
fig.update_layout(
title='期末成績對比情況', # 整個圖的标題
xaxis_tickfont_size=12, # x軸字型大小
yaxis=dict(
title='成績', # y軸的标題
titlefont_size=16, # 标題大小
tickfont_size=6, # y軸上的數值大小
),
legend=dict(
x=0, # 圖例的位置
y=1,
# bgcolor='rgba(255, 255, 255, 0)', # 圖例的背景色
bordercolor='rgba(112, 255, 255, 0)' # 邊緣顔色
),
barmode='group', # 柱狀圖模式
bargap=0.5, # 組間距離
bargroupgap=0.4 # 組内距離
)
fig.show()
繪制水準柱狀圖
1、基于px實作水準柱狀圖,加上參數orientation=‘h’
df1 = pd.DataFrame({
"name": ["小明","小紅","周明","周紅","張三"],
"age": [20,28,18,25,36],
"score": ["150","170","160","168","154"]
})
df1
fig = px.bar(
df1,
y="name", # xy軸的資料需要交換
x="age",
orientation='h', # 水準柱狀圖
text="age" # 需要顯示的資料
)
# 設定文本顯示的位置,預設是裡面
# fig.update_traces(textposition="outside") # ['inside', 'outside', 'auto', 'none']
fig.show()
2、改變柱狀圖顔色
第一種方法是使用顔色參數color
fig = px.bar(
df1,
y="name",
x="age",
color="age", # 顔色參數
orientation='h', # 水準柱狀圖
text="age"
)
fig.update_traces(textposition="outside") # ['inside', 'outside', 'auto', 'none']
fig.show()
第二種情況是自定義顔色
fig = px.bar(
df1,
y="name",
x="age",
# color="age",
# 自定義顔色
color_discrete_sequence=px.colors.diverging.RdBu,
orientation='h', # 水準柱狀圖
text="age"
)
fig.update_traces(textposition="outside") # ['inside', 'outside', 'auto', 'none']
fig.show()
3、基于go方法實作
fig = go.Figure(go.Bar(
x=df1["score"].tolist(), # x軸資料
y=df1["name"].tolist(), # y軸資料
orientation='h'))
fig.show()
4、分組水準柱狀圖
import plotly.graph_objects as go
# 生成畫布
fig = go.Figure()
# 添加3個圖形軌迹
fig.add_trace(go.Bar(
y=['小明', '小紅', '張三'],
x=[120, 74, 103],
name='國文',
orientation='h',
marker=dict(
color='rgba(246, 78, 139, 0.6)',
line=dict(color='rgba(246, 78, 139, 1.0)', width=3)
)
))
fig.add_trace(go.Bar(
y=['小明', '小紅', '張三'],
x=[92, 128, 89],
name='數學',
orientation='h',
marker=dict(
color='rgba(5, 71, 80, 0.6)',
line=dict(color='rgba(58, 71, 80, 1.0)', width=3)
)
))
fig.add_trace(go.Bar(
y=['小明', '小紅', '張三'],
x=[92, 78, 69],
name='英語',
orientation='h',
marker=dict(
color='rgba(18, 7, 80, 0.6)',
line=dict(color='rgba(58, 71, 80, 1.0)', width=3)
)
))
fig.update_layout(barmode='stack') # 堆疊模式:['stack', 'group', 'overlay', 'relative']
fig.show()
繪制漏鬥圖
漏鬥圖在電商銷售領域使用的非常普遍,它能夠明顯地觀察到不同階段之間的轉化效果,下面通過不同的例子來講解漏鬥圖的制作。
1、普通漏鬥圖
自行模拟一份資料:
data1 = pd.DataFrame({
"number": [1200,900,700,400,180,100],
"stage": ["浏覽網站","搜尋","加購","送出訂單","點選支付","支付成功"]}
)
data1
# 繪圖
fig = px.funnel(
data1, # 繪圖資料
x="number", # x軸資料
y="stage" # y軸資料
)
fig.show()
通過go方法來實作基礎漏鬥圖:
from plotly import graph_objects as go
fig = go.Figure(go.Funnel(
x=[1000,800,400,100],
y=["浏覽網站","加購","點選支付","支付成功"]
))
fig.show()
還可以給漏鬥圖改變顔色,隻需要加上顔色參數color
# 加上顔色參數color
fig = px.funnel(
data1[::-1], # 資料翻轉
x="number",
y="stage",
color="stage" # 改成stage
)
fig.show()
2、分組漏鬥組的展示
将不同組别的漏鬥圖放在一個大的畫布中,我們生成2020年3月份和2021年3月份的資料,繪制分組漏鬥圖:
# 2020年3月資料
stage=["浏覽網站","加購","點選支付","支付成功"]
df1 = pd.DataFrame(dict(
number=[1000,800,400,100],
stages=stage
))
df1["time"] = "2020年3月"
df1
# 2021年3月份
stage=["浏覽網站","加購","點選支付","支付成功"]
df2 = pd.DataFrame(dict(
number=[1200,600,300,140],
stages=stage
))
df2["time"] = "2021年3月"
df2
上面生成了兩個月份的不同資料,現在通過concat函數進行資料的合并:
# 将兩組資料合并
df3 = pd.concat([df1, df2], axis=0)
df3
最後通過funnel()方法來繪圖:
# 繪圖
fig = px.funnel(df3,x="number",y="stages",color="time")
fig.show()
3、通過go方法來實作分組漏鬥
from plotly import graph_objects as go
stage = ["浏覽網站","加購","點選支付","支付成功"]
fig = go.Figure()
fig.add_trace(go.Funnel(
name = "2020年3月", # 圖形軌迹名稱
x = [1000,800,400,200], # 資料
y = stage, # 每個階段名稱
orientation = "h", # 方位
textposition = "inside", # 文本内容的位置
textinfo = "value+percent previous" # 顯示文本内容
))
fig.add_trace(go.Funnel(
name = "2021年2月", # 名稱和資料需要改變
x = [1200,900,500,240],
y = stage,
orientation = "h",
textposition = "inside",
textinfo = "value+percent total"
))
fig.add_trace(go.Funnel(
name = "2021年3月", # 名稱和資料需要改變
x = [1500,1000,450,300],
y = stage,
orientation = "h",
textposition = "inside",
textinfo = "label+percent initial"
))
fig.show()
繪制餅圖
餅圖在可視化圖表中是一種非常常見的圖,它能夠很好地展示不同組别的占比情況,下面通過具體的案例來繪制不同需求的餅圖。
1、基礎餅圖的繪制
模拟一份水果店的進貨數量的資料,如下表:
fruit = pd.DataFrame({
"name":["蘋果","香蕉","梨","鳳梨","葡萄"],
"number":[1000,800,600,2000,2500]
})
fruit
fig = px.pie(
fruit, # 繪圖資料
names="name", # 顯示的名稱
values="number" # 顯示的資料
)
fig.show()
基于go方法實作基礎餅圖:
import plotly.graph_objects as go
name=fruit["name"].tolist()
value=fruit["number"].tolist()
fig = go.Figure(
data=[go.Pie(
labels=name, # 标簽
values=value # 顯示資料
)]
)
fig.show()
結果和上面的圖形相同
2、給餅圖添加标題,并改變位置
fig = px.pie(
fruit,
names="name",
values="number"
)
fig.update_layout(
title={ # 設定整個标題的名稱和位置
"text":"水果數量占比", # 标題
"y":0.96, # 通過4個參數控制标題位置
"x":0.5,
"xanchor":"center",
"yanchor":"top"
}
)
fig.show()
3、改變餅圖顔色
上面繪制的餅圖是預設的顔色,我們可以對顔色進行設定
第一種是加上顔色參數color:
fig = px.pie(
fruit,
names="name",
values="number",
color="number" # 顔色參數
)
fig.show()
第二種是通過參數
color_discrete_sequence
:
fig = px.pie(
fruit,
names="name",
values="number",
# 不同顔色:RdBu、Peach
color_discrete_sequence=px.colors.sequential.Plotly3 # Plotly3可以變成不同顔色
)
fig.show()
第三種是通過字典的形式來設定顔色:
fig = px.pie(
fruit,
names="name",
values="number",
color="name",
color_discrete_map={ # 下面是通過字典形式來設定每個分組的顔色
'葡萄':'lightcyan',
'鳳梨':'cyan',
'蘋果':'royablue',
'香蕉':'darkblue',
'梨':'red'}
)
fig.show()
4、餅圖文本資訊設定
fig = px.pie(
fruit,
names="name",
values="number"
)
fig.update_traces(
# 文本顯示的4種位置:['inside', 'outside', 'auto', 'none']
textposition='inside',
# percent、label、value的組合或者單獨出現
textinfo='percent+label',
# 文本資訊的3種朝向:horizontal(預設)、radial、tangential
insidetextorientation='horizontal'
)
fig.show()
5、甜甜圈圖的繪制
甜甜圈圖指的是餅圖的中間出現了一個空洞部分:
import plotly.graph_objects as go
labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [3000, 1500, 1000, 2500]
fig = go.Figure(data=[go.Pie(
labels=labels,
values=values,
hole=.4 # 空洞的比例大小
)])
fig.show()
6、剝離扇形區域
import plotly.graph_objects as go
labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [3000, 1000, 4000, 2500]
fig = go.Figure(data=[go.Pie(
labels=labels,
values=values,
pull=[0.3,0.1,0,0] # 設定脫離參數
)])
fig.show()
7、旭日圖的制作
我們以Plotly中自帶的tips消費資料來繪制旭日圖:
fig = px.sunburst(
tips,
path=['day','time','sex'], # 最裡層是day,中間是time,最外層是sex
values='total_bill'
)
fig.show()
給旭日圖設定顔色:
df = px.data.tips()
fig = px.sunburst(
df,
path=['time', 'sex', 'day'], # 從最裡層到最外層
values='total_bill', # 資料
color='day' # 顔色
)
fig.show()
繪制面積圖
使用的是Plotly中自帶的gdp資料集:
# area 圖
px.area(
gapminder, # 資料集
x="year", # xy軸的資料
y="pop",
color="continent", # 顔色
line_group="country" # 線型分組
)
繪制直方圖
px.histogram(
tips, # 繪圖資料
x="sex", # 指定兩個數軸
y="tip",
histfunc="avg", # 直方圖函數:均值
color="smoker", # 顔色取值
barmode="group", # 柱狀圖模式
facet_row="time", # 橫縱縱軸的字段設定
facet_col="day",
category_orders={"day":["Thur","Fri","Sat","Sun"], # 分類
"time":["Lunch","Dinner"]})
聯合分布圖
聯合分布圖是将多個不同類型的圖形放置在一個大的畫布中,比如我們使用鸢尾花資料集繪制聯合分布圖:
px.scatter(
iris,
x="sepal_width",
y="sepal_length",
color="species",
marginal_x="histogram",
marginal_y="rug"
)
繪制散點矩陣圖
散點矩陣圖是将多個散點圖并排顯示,同時顯示不同名額之間的關系:
使用Plotly中自帶的iris資料集:
px.scatter_matrix(
iris, # 繪圖資料
dimensions=["sepal_width","sepal_length","petal_width","petal_length"], # 不同的名額
color="species" # 顔色
)
繪制密度圖
第一種是繪制密度熱力圖:
px.density_heatmap(
iris,
x="sepal_width",
y="sepal_length",
marginal_y="rug",
marginal_x="histogram" # 在密度圖的基礎上,指定另外兩種圖形
)
第二種是繪制等值線圖:
px.density_contour(
iris, # 傳入繪圖資料
x="sepal_width", # 指定xy軸
y="sepal_length",
color="species", # 顔色設定
marginal_x="rug", # 需要傳入邊緣圖形
marginal_y="histogram"
)
繪制并行分類圖
使用的是餐廳消費資料tips
px.parallel_categories(
tips, # 傳入資料
color="size", # 顔色取值
color_continuous_scale=px.colors.sequential.Inferno # 顔色變化趨勢
)
繪制地圖圖形
第一種方法是通過
px.choropleth
:
px.choropleth(
gapminder, # 繪圖資料
locations="iso_alpha", # 位置
color="lifeExp", # 顔色
hover_name="country", # 懸停資訊
animation_frame="year", # 播放按鈕設定
color_continuous_scale=px.colors.sequential.Plasma, # 顔色連續變化
projection="natural earth" # 地圖選擇
)
第二種方法是通過
line_geo
實作:
gapminder = px.data.gapminder()
# gapminder_2002 = gapminder.query("year==2002")
gapminder_2002 = gapminder[gapminder["year"] == 2002]
gapminder_2002
px.line_geo(
gapminder_2002,
locations="iso_alpha",
color="continent",
projection="orthographic")
繪制矩陣式樹狀圖
# 選取2002年資料
gapminder_2002 = gapminder[gapminder["year"] == 2002]
px.treemap(
gapminder_2002, # 資料
path=[px.Constant('world'), 'continent', 'country'], # 繪圖路徑:world---continent---country
values='pop', # 資料取值
color='pop', # 顔色取值
hover_data=['iso_alpha']) # 顯示資料:國家簡稱
繪制散點極坐标圖
使用的是Plotly中自帶的風力wind資料集:
px.scatter_polar(
wind, # 資料集
r="frequency", # 半徑
theta="direction", # 角度
color="strength", # 顔色
symbol="strength", # 符号
color_discrete_sequence=px.colors.sequential.Plasma_r) # 顔色
改變圖形的背景主題再繪制一次:
fig = px.bar_polar(
wind, # 資料集
r="frequency", # 半徑
theta="direction", # 角度
color="strength", # 顔色
template="plotly_dark", # 主題
color_discrete_sequence=px.colors.sequential.Plasma_r) # 顔色
fig.show()
顔色面闆
Plotly中内置了多種顔色面闆可供使用者使用,顔色可任意選擇,下面進行介紹:
順序色标系列
漸變的顔色系列,适用于大多數連續資料進行繪圖:
定性色标系列
該系列的顔色是離散型的,每個子顔色都不相同或者相近,适用于沒有自然順序的資料進行繪圖:
分散色标系列
适合于具有自然中點的連續資料,色系會出現突變:
周期性色标系列
該色标系列适用于具有自然周期結構的連續資料
ColorBrewer2系列
CMOcean系列
卡通主題系列
這是一個卡通系列的顔色面闆,顔色是漸變型的
總結
本文着重講解了一個新的進階可視化神器:Plotly。從其特點、安裝、内置資料集、各種精美圖表制作案例介紹、顔色面闆等,詳細地介紹了Plotly的使用,希望能夠對讀者有所幫助,也希望讀者能夠愛上這個進階可視化神器。