天天看點

聽說是Python 可視化神器:Plotly Express起因安裝上手箱型圖小提琴圖其他圖進階 - update

恭喜Running Man10周年,Keep Running!

  • 起因
  • 安裝
    • pip指令
    • 相關連結
  • 上手
    • 散點圖
    • 折線圖
    • 條形圖
    • 散點矩陣
    • 平行坐标圖
    • 直方圖
  • 箱型圖
  • 小提琴圖
  • 其他圖
  • 進階 - update

起因

早上逛公衆号看到有個庫

plotly

做可視化很厲害,早上閑來無事就研究下,後面發現還要新增賬號,直接勸退,結果被我找到他的一個進階封裝庫叫

plotly_express

,也有神器的名号,那就這個吧~

安裝

pip指令

pip install plotly_express

相關連結

參考博文

https://www.jianshu.com/p/41735ecd3f75

https://www.jianshu.com/p/44416202aafb

http://liyangbit.com/pythonvisualization/Plotly-Express-introduction-cn/

官方文檔

https://plotly.com/python/plotly-express/

上手

散點圖

一個最簡單的散點圖實作:

import plotly_express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
fig.show()
           

用的資料源是内置且很常見的鸢尾花資料集,效果長這樣:

聽說是Python 可視化神器:Plotly Express起因安裝上手箱型圖小提琴圖其他圖進階 - update

在此基礎上,可以通過添加更多的關鍵字參數來豐富圖像的内容。

trendline

參數可以添加預測的趨勢線,現在可選的值有兩個

ols

lowess

,前者是線性的最小二乘回歸模型,後者是非線性的局部權重回歸模型,具體算法我也不明,反正一個用于線性一個用于非線性呗。

template

就不用多贅述了吧,可選值有這些

["plotly", "plotly_white", "plotly_dark", "ggplot2", "seaborn", "simple_white", "none"]

,選自己喜歡的就好。

error_x

error_y

代表了誤差線,傳入值跟

x y

參數一樣都是資料源的列名,是以需要先在

DF

上面計算出來。

marginal_x

marginal_y

看效果是在添加一個水準/垂直方向的子圖,可選項有這些

rug(細條)、box(箱圖)、violin(小提琴圖)、histogram(直方圖)

還有很多牛逼的參數像

animation_frame

facet_col

這些你可以通過

help(px.scatter)

一一查詢,每個參數都介紹得挺清楚的,要是有中文翻譯就好了嗚嗚。

他官網上面最終的散點圖長這樣:

import plotly_express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", marginal_y="violin",
           marginal_x="box", trendline="ols", template="simple_white")
fig.show()
           
聽說是Python 可視化神器:Plotly Express起因安裝上手箱型圖小提琴圖其他圖進階 - update

折線圖

import plotly_express as px
import numpy as np

t = np.linspace(0, 2*np.pi, 100)

fig = px.line(x=t, y=np.cos(t), labels={'x':'t', 'y':'cos(t)'})
fig.show()

import plotly_express as px
df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(df, x='year', y='lifeExp', color='country')
fig.show()
           

如果你想要折線圖能夠圓滑一點,就不是那種尖尖,可以設定這兩個參數

render_mode="svg"

line_shape="spline"

,像這樣:

px.line(gapminder, x="year", y="lifeExp", color="continent", 
        line_group="country", hover_name="country",
        line_shape="spline", render_mode="svg")
           
聽說是Python 可視化神器:Plotly Express起因安裝上手箱型圖小提琴圖其他圖進階 - update

條形圖

import plotly_express as px
data_canada = px.data.gapminder().query("country == 'Canada'")
fig = px.bar(data_canada, x='year', y='pop')
fig.show()
           

如果很多行資料在x軸次元上擁有同樣的值,矩形會預設地一個一個堆疊起來,更改參數

barmode

即可。添加

facet_row

facet_col

參數産生多面的子圖:

import plotly_express as px
fig = px.bar(df, 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()
           
聽說是Python 可視化神器:Plotly Express起因安裝上手箱型圖小提琴圖其他圖進階 - update

散點矩陣

import plotly_express as px
df = px.data.iris()
fig = px.scatter_matrix(df, dimensions=["sepal_width", "sepal_length", "petal_width", "petal_length"], color="species")
fig.show()
           
聽說是Python 可視化神器:Plotly Express起因安裝上手箱型圖小提琴圖其他圖進階 - update

可以通過

fig.update_traces(diagonal_visible=False)

把對角線的子圖隐藏掉。

平行坐标圖

import plotly_express as px
df = px.data.iris()
fig = px.parallel_coordinates(df, color="species_id", labels={"species_id": "Species",
                  "sepal_width": "Sepal Width", "sepal_length": "Sepal Length",
                  "petal_width": "Petal Width", "petal_length": "Petal Length", },
                    color_continuous_scale=px.colors.diverging.Tealrose, color_continuous_midpoint=2)
fig.show()
           
聽說是Python 可視化神器:Plotly Express起因安裝上手箱型圖小提琴圖其他圖進階 - update

看起來很進階的樣子,不知道哪裡能用得到。

直方圖

px.histogram(tips, x="total_bill", y="tip", color="sex", marginal="rug", histfunc="avg",
             hover_data=tips.columns)
           
聽說是Python 可視化神器:Plotly Express起因安裝上手箱型圖小提琴圖其他圖進階 - update

特别一點的參數有

histfunc

,預設值是

count

,可選值有

count/sum/avg/min/max

histnorm

預設為 None,不對資料做任何處理,可選值有

percent/probability/density/probability density

,前兩個算出占比,後兩個算密度。

箱型圖

箱型圖的

boxmode

預設值就是

group

,不像直方圖和條形圖,

notched

參數代表了圖像有沒有缺口

小提琴圖

px.violin(tips, y="tip", x="smoker", color="sex", box=True, points="all", 
          hover_data=tips.columns)
           

小提琴圖和箱型圖的組合總是讓人不忍直視,是以沒圖。

其他圖

還有很多圖就稍微提一下,用的沒上面多。三元散點圖(scatter_ternary)、三元線條圖(line_ternary)、三維散點圖(scatter_3d)、極坐标散點圖(scatter_polar)、極坐标線條圖(line_polar)、極坐标條形圖(bar_polar)、地理坐标散點圖(scatter_geo)、地理坐标線條圖(line_geo)、等高值區域地圖(choropleth)等。

進階 - update

Plotly_express 的輸出,繼承自 Plotly.py 的 Figure 類 ExpressFigure 的對象,這意味着可以使用任何 Figure 的通路器和方法,來改變 px 生成的圖表,通常借助于 .update() 函數來調用。

update的用法可太多了,下面列舉一下我用過的,以後慢慢補充吧:

# 對y軸的資料做升序排列,配合animation_frame可以做一個簡陋的動畫,對每一幀都排序。
fig.update_yaxes(categoryorder='total ascending')

# 設定y軸上字型的大小和角度
fig.update_yaxes(tickfont=dict(size=15),tickangle=-45)

# 設定條形圖text的樣式和位置(預設是在裡面)
fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')

# 設定标題
fig.update_layout(barmode='relative',title='asd')