天天看點

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

說到

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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

可能讀者會感覺到繪制出來的圖表略顯簡單,我們再來完善一下,添加上标題和注解,代碼如下

# 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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

分組條形圖和堆積條形圖

例如我們有多組資料想要繪制成柱狀圖的話,我們先來建立好資料集

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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

而我們想要變成堆積狀的條形圖,隻需要修改代碼中的一處即可,将

fig.update_layout(barmode="group")

修改成

fig.update_layout(barmode="group?imageView2/2/w/1620")

即可,我們來看一下出來的樣子

箱型圖

箱型圖在資料統計分析當中也是應用相當廣泛的,我們先來建立兩個假資料

# 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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

散點圖和氣泡圖

接下來我們嘗試來繪制一張散點圖,也是一樣的步驟,我們想嘗試生成一些假資料,代碼如下

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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

那麼氣泡圖的話就是在散點圖的基礎上,根據數值的大小來設定散點的大小,我們再來建立一些假資料用來設定散點的大小,代碼如下

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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

直方圖

直方圖相比較于上面提到的幾種圖表,總體上來說會稍微有點醜,但是通過直方圖,讀者可以更加直覺地感受到資料的分布,我們先來建立一組假資料,代碼如下

## 建立假資料
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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

我們再在上述圖表的基礎之上再進行進一步的格式優化,代碼如下

# 生成畫布
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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!

多個子圖拼湊到一塊兒

相信大家都知道在

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

【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!