可視化工具Plotly_express


 

以下文章來源於Python編程時光 ,作者Peter

 
今天給大家推薦一個可視化神器 - Plotly_express ,上手非常的簡單,基本所有的圖都只要一行代碼就能繪出一張非常酷炫的可視化圖。
以下是這個神器的詳細使用方法,文中附含大量的 GIF 動圖示例圖。

1. 環境准備

本文的是在如下環境下測試完成的。
  • Python3.7
  • Jupyter notebook
  • Pandas1.1.3
  • Plotly_express0.4.1
其中 Plotly_express0.4.1 是本文的主角,安裝它非常簡單,只需要使用 pip install 就可以
$ python3 -m pip install plotly_express

 

2. 工具概述

在說  plotly_express之前,我們先了解下 plotlyPlotly是新一代的可視化神器,由 TopQ量化團隊開源。雖然 Ploltly功能非常之強大,但是一直沒有得到重視,主要原因還是其設置過於繁瑣。因此, Plotly推出了其簡化接口: Plotly_express,下文中統一簡稱為 pxpx是對 Plotly.py的一種高級封裝,其內置了很多實用且現代的繪圖模板,用戶只需要調用簡單的API函數即可實用,從而快速繪制出漂亮且動態的可視化圖表。 px是完全免費的,用戶可以任意使用它。最重要的是, pxplotly生態系統的其他部分是完全兼容的。用戶不僅可以在 Dash中使用,還能通過 Orca將數據導出為幾乎任意文件格式。官網的學習資料:https://plotly.com/px的安裝是非常簡單的,只需要通過 pip install plotly_express來安裝即可。安裝之后的使用:
import plotly_express as px  

3. 開始繪圖

接下來我們通過px中自帶的數據集來繪制各種精美的圖形。
  • gapminder
  • tips
  • wind

3.1 數據集

首先我們看下 px中自帶的數據集:
import pandas as pd
import numpy as np
import plotly_express as px  # 現在這種方式也可行:import plotly.express as px

# 數據集
gapminder = px.data.gapminder()
gapminder.head()  # 取出前5條數據

 

我們看看全部屬性值:

 

 

 

 

3.2 線型圖

線型圖line在可視化制圖中是很常見的。利用px能夠快速地制作線型圖:
# line 圖
fig = px.line(
  gapminder,  # 數據集
  x="year",  # 橫坐標
  y="lifeExp",  # 縱坐標
  color="continent",  # 顏色的數據
  line_group="continent",  # 線性分組
  hover_name="country",   # 懸停hover的數據
  line_shape="spline",  # 線的形狀
  render_mode="svg"  # 生成的圖片模式
)
fig.show()

 

 

 

再來制作面積圖:
# area 圖
fig = px.area(
  gapminder,  # 數據集
  x="year",  # 橫坐標
  y="pop",  # 縱坐標
  color="continent",   # 顏色
  line_group="country"  # 線性組別
)
fig.show()

 



3.3 散點圖

散點圖的制作調用 scatter方法:

 

指定size參數還能改變每個點的大小:

px.scatter(
  gapminder2007   # 繪圖DataFrame數據集
  ,x="gdpPercap"  # 橫坐標
  ,y="lifeExp"  # 縱坐標
  ,color="continent"  # 區分顏色
  ,size="pop"   # 區分圓的大小
  ,size_max=60  # 散點大小
)

 

 

 


通過指定 facet_colanimation_frame參數還能將散點進行分塊顯示:
px.scatter(
  gapminder   # 繪圖使用的數據
  ,x="gdpPercap" # 橫縱坐標使用的數據
  ,y="lifeExp"  # 縱坐標數據
  ,color="continent"  # 區分顏色的屬性
  ,size="pop"   # 區分圓的大小
  ,size_max=60  # 圓的最大值
  ,hover_name="country"  # 圖中可視化最上面的名字
  ,animation_frame="year"  # 橫軸滾動欄的屬性year
  ,animation_group="country"  # 標注的分組
  ,facet_col="continent"   # 按照國家country屬性進行分格顯示
  ,log_x=True  # 橫坐標表取對數
  ,range_x=[100,100000]  # 橫軸取值范圍
  ,range_y=[25,90]  # 縱軸范圍
  ,labels=dict(pop="Populations",  # 屬性名字的變化,更直觀
               gdpPercap="GDP per Capital",
               lifeExp="Life Expectancy")
)

 

 

 



3.4 地理數據繪圖

在實際的工作中,我們可能會接觸到中國地圖甚至是全球地圖,使用px也能制作:
px.choropleth(
  gapminder,  # 數據集
  locations="iso_alpha",  # 配合顏色color顯示
  color="lifeExp", # 顏色的字段選擇
  hover_name="country",  # 懸停字段名字
  animation_frame="year",  # 注釋
  color_continuous_scale=px.colors.sequential.Plasma,  # 顏色變化
  projection="natural earth"  # 全球地圖
             )

 

 

 


fig = px.scatter_geo(
  gapminder,   # 數據
  locations="iso_alpha",  # 配合顏色color顯示
  color="continent", # 顏色
  hover_name="country", # 懸停數據
  size="pop",  # 大小
  animation_frame="year",  # 數據幀的選擇
  projection="natural earth"  # 全球地圖
                    )

fig.show()

 

 

 



  px.scatter_geo(gapminder, # 數據集
  locations="iso_alpha",  # 配和color顯示顏色
  color="continent",  # 顏色的字段顯示
  hover_name="country",  # 懸停數據
  size="pop",  # 大小
  animation_frame="year"  # 數據聯動變化的選擇
  #,projection="natural earth"   # 去掉projection參數
)

 

 
         使用line_geo來制圖: 
         
fig = px.line_geo(
  gapminder2007,  # 數據集
  locations="iso_alpha",  # 配合和color顯示數據
  color="continent",  # 顏色
  projection="orthographic")   # 球形的地圖
fig.show()

 

 

 


3.5 使用內置iris數據

我們先看看怎么使用px來查看內置數據的文檔:
 

 

 

選擇兩個屬性制圖

選擇兩個屬性作為橫縱坐標來繪制散點圖
fig = px.scatter(
  iris,  # 數據集
  x="sepal_width",  # 橫坐標
  y="sepal_length"  # 縱坐標
                )
fig.show()

 

 

 

通過color參數來顯示不同的顏色:

 

 

 

3.6 聯合分布圖

我們一個圖形中能夠將散點圖和直方圖組合在一起顯示:
px.scatter(
  iris,  # 數據集
  x="sepal_width", # 橫坐標
  y="sepal_length",  # 縱坐標
  color="species",  # 顏色
  marginal_x="histogram",  # 橫坐標直方圖
  marginal_y="rug"   # 細條圖
)

 



 
          
         

3.7 小提琴圖

小提琴圖能夠很好的顯示數據的分布和誤差情況,一行代碼利用也能顯示小提琴圖:
px.scatter(
  iris,  # 數據集
  x="sepal_width",  # 橫坐標
  y="sepal_length",  # 縱坐標
  color="species",  # 顏色
  marginal_y="violin",  # 縱坐標小提琴圖
  marginal_x="box",  # 橫坐標箱型圖
  trendline="ols"  # 趨勢線
)

 

 

 

3.8 散點矩陣圖

px.scatter_matrix(
  iris,  # 數據
  dimensions=["sepal_width","sepal_length","petal_width","petal_length"],  # 維度選擇
  color="species")  # 顏色

 

 

 

3.9 平行坐標圖

px.parallel_coordinates(
  iris,   # 數據集
  color="species_id",  # 顏色
  labels={"species_id":"Species",  # 各種標簽值
          "sepal_width":"Sepal Width",
          "sepal_length":"Sepal Length",
          "petal_length":"Petal Length",
          "petal_width":"Petal Width"},
  color_continuous_scale=px.colors.diverging.Tealrose,
  color_continuous_midpoint=2)

 

 

 

 

3.10 箱體誤差圖

# 對當前值加上下兩個誤差值
iris["e"] = iris["sepal_width"] / 100
px.scatter(
  iris,  # 繪圖數據集
  x="sepal_width",  # 橫坐標
  y="sepal_length",  # 縱坐標
  color="species",  # 顏色值
  error_x="e",  # 橫軸誤差
  error_y="e"  # 縱軸誤差
          )

 

 

 

3.11 等高線圖

等高線圖反映數據的密度情況:
px.density_contour(
  iris,  # 繪圖數據集
  x="sepal_width",  # 橫坐標
  y="sepal_length",  # 縱坐標值
  color="species"  # 顏色
)

 

 

 



等高線圖和直方圖的倆和使用:
px.density_contour(
  iris, # 數據集
  x="sepal_width",  # 橫坐標值
  y="sepal_length",  # 縱坐標值
  color="species",  # 顏色
  marginal_x="rug",  # 橫軸為線條圖
  marginal_y="histogram"   # 縱軸為直方圖
                  )

 

 

 

3.12 密度熱力圖

px.density_heatmap(
  iris,  # 數據集
  x="sepal_width",   # 橫坐標值
  y="sepal_length",  # 縱坐標值
  marginal_y="rug",  # 縱坐標值為線型圖
  marginal_x="histogram"  # 直方圖
                  )

 

 

 

3.13 並行類別圖

在接下來的圖形中我們使用的小費tips實例,首先是導入數據:

 

 

fig = px.parallel_categories(
  tips,  # 數據集 
  color="size",  # 顏色
  color_continuous_scale=px.colors.sequential.Inferno)  # 顏色變化取值
fig.show()

 



3.14 柱狀圖

 

 

 

fig = px.bar(
  tips,  # 數據集
  x="sex",  # 橫軸
  y="total_bill",  # 縱軸
  color="smoker",  # 顏色參數取值
  barmode="group",  # 柱狀圖模式取值
  facet_row="time",  # 行取值
  facet_col="day",  # 列元素取值
  category_orders={
    "day": ["Thur","Fri","Sat","Sun"],  # 分類順序
    "time":["Lunch", "Dinner"]})
fig.show()

 

 

 

 

3.15 直方圖

fig = 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"]}
)

fig.show()

 

 

 

 

 

3.16 箱型圖

箱型圖也是現實數據的誤差和分布情況:
# notched=True顯示連接處的錐形部分
px.box(tips,  # 數據集
       x="day",  # 橫軸數據
       y="total_bill",  # 縱軸數據
       color="smoker",  # 顏色
       notched=True)  # 連接處的錐形部分顯示出來

 

 

px.box(
  tips,  # 數據集
  x="day",  # 橫軸
 y="total_bill",  # 縱軸 
 color="smoker",  # 顏色
#         notched=True   # 隱藏參數
      )

 

 

 

再來畫一次小提琴圖:
px.violin(
    tips,   # 數據集
    x="smoker",  # 橫軸坐標
    y="tip",  # 縱軸坐標  
    color="sex",   # 顏色參數取值
    box=True,   # box是顯示內部的箱體
    points="all",  # 同時顯示數值點
    hover_data=tips.columns)  # 結果中顯示全部數據

 

 

 

3.17 極坐標圖

在這里我們使用的是內置的wind數據:

 

 

散點極坐標圖

 

 

線性極坐標圖  

fig = px.line_polar(
    wind,  # 數據集
    r="frequency",  # 半徑
    theta="direction",  # 角度
    color="strength",  # 顏色
    line_close=True,  # 線性閉合
    color_discrete_sequence=px.colors.sequential.Plasma_r)  # 顏色變化
fig.show()

 

 

 

柱狀極坐標圖

fig = px.bar_polar(
    wind,   # 數據集
    r="frequency",   # 半徑
    theta="direction",  # 角度
    color="strength",  # 顏色
    template="plotly_dark",  # 主題
    color_discrete_sequence=px.colors.sequential.Plasma_r)  # 顏色變化
fig.show()

 

 

 

4. 顏色面板

在px中有很多的顏色可以供選擇,提供了一個顏色面板:
px.colors.qualitative.swatches()

 

 

 

px.colors.sequential.swatches()

 

 

 

5. 主題

px中存在3種主題:
  • plotly
  • plotly_white
  • plotly_dark
px.scatter(
    iris,  # 數據集
    x="sepal_width",  # 橫坐標值
    y="sepal_length",  # 縱坐標取值
    color="species",  # 顏色
    marginal_x="box",  # 橫坐標為箱型圖
    marginal_y="histogram",  # 縱坐標為直方圖
    height=600,  # 高度
    trendline="ols",  # 顯示趨勢線
    template="plotly")  # 主題

 

 

 

px.scatter(
    iris,  # 數據集
    x="sepal_width",  # 橫坐標值
    y="sepal_length",  # 縱坐標取值
    color="species",  # 顏色
    marginal_x="box",  # 橫坐標為箱型圖
    marginal_y="histogram",  # 縱坐標為直方圖
    height=600,  # 高度
    trendline="ols",  # 顯示趨勢線
    template="plotly_white")  # 主題  

 

  

 

 


px.scatter(
    iris,  # 數據集
    x="sepal_width",  # 橫坐標值
    y="sepal_length",  # 縱坐標取值
    color="species",  # 顏色
    marginal_x="box",  # 橫坐標為箱型圖
    marginal_y="histogram",  # 縱坐標為直方圖
    height=600,  # 高度
    trendline="ols",  # 顯示趨勢線
    template="plotly_dark")  # 主題   

 


 

 

6. 總結一下

本文中利用大量的篇幅講解了如何通過plotly_express來繪制: 柱狀圖、線型圖、散點圖、小提琴圖、極坐標圖等各種常見的圖形。通過觀察上面 Plotly_express繪制圖形過程,我們不難發現它有三個主要的優點:
  • 快速出圖,少量的代碼就能滿足多數的制圖要求。基本上都是幾個參數的設置我們就能快速出圖
  • 圖形漂亮,繪制出來的可視化圖形顏色亮麗,也有很多的顏色供選擇。
  • 圖形是動態可視化的。文章中圖形都是截圖,如果是在Jupyter notebook中都是動態圖形


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM