【Plotly快速入門】用Plotly繪制了幾張精湛的圖表,美翻了!!
說到
Python當(dāng)中的可視化模塊,相信大家用的比較多的還是matplotlib、seaborn等模塊,今天小編來嘗試用Plotly模塊為大家繪制可視化圖表,和前兩者相比,用Plotly模塊會(huì)指出來的可視化圖表有著很強(qiáng)的交互性。柱狀圖
我們先導(dǎo)入后面需要用到的模塊并且生成一批假數(shù)據(jù),
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"]
我們基于所生成的假數(shù)據(jù)來繪制柱狀圖,代碼如下
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

分組條形圖和堆積條形圖
例如我們有多組數(shù)據(jù)想要繪制成柱狀圖的話,我們先來創(chuàng)建好數(shù)據(jù)集
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]
然后我們遍歷獲取列表中的數(shù)值并且繪制成條形圖,代碼如下
#?生成畫布
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")即可,我們來看一下出來的樣子箱型圖
箱型圖在數(shù)據(jù)統(tǒng)計(jì)分析當(dāng)中也是應(yīng)用相當(dāng)廣泛的,我們先來創(chuàng)建兩個(gè)假數(shù)據(jù)
#?create?dummy?data?for?boxplots
y1?=?np.random.normal(size=1000)
y2?=?np.random.normal(size=1000)
我們將上面生成的數(shù)據(jù)繪制成箱型圖,代碼如下
#?生成畫布
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

散點(diǎn)圖和氣泡圖
接下來我們嘗試來繪制一張散點(diǎn)圖,也是一樣的步驟,我們想嘗試生成一些假數(shù)據(jù),代碼如下
x?=?[i?for?i?in?range(1,?10)]
y?=?np.ceil(1000?*?np.random.rand(10)).astype(int)
然后我們來繪制散點(diǎn)圖,調(diào)用的是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)
我們將上面用作繪制散點(diǎn)圖的代碼稍作修改,通過marker_size參數(shù)來設(shè)定散點(diǎn)的大小,如下所示
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

直方圖
直方圖相比較于上面提到的幾種圖表,總體上來說會(huì)稍微有點(diǎn)丑,但是通過直方圖,讀者可以更加直觀地感受到數(shù)據(jù)的分布,我們先來創(chuàng)建一組假數(shù)據(jù),代碼如下
##?創(chuàng)建假數(shù)據(jù)
data?=?np.random.normal(size=1000)
然后我們來繪制直方圖,調(diào)用的是Histogram()方法,代碼如下
#?創(chuàng)建畫布
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

我們?cè)僭谏鲜鰣D表的基礎(chǔ)之上再進(jìn)行進(jìn)一步的格式優(yōu)化,代碼如下
#?生成畫布
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

多個(gè)子圖拼湊到一塊兒
相信大家都知道在matplotlib模塊當(dāng)中的subplots()方法可以將多個(gè)子圖拼湊到一塊兒,那么同樣地在plotly當(dāng)中也可以同樣地將多個(gè)子圖拼湊到一塊兒,調(diào)用的是plotly模塊當(dāng)中make_subplots函數(shù)
from?plotly.subplots?import?make_subplots
##?2行2列的圖表
fig?=?make_subplots(rows=2,?cols=2)
##?生成一批假數(shù)據(jù)用于圖表的繪制
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()方法當(dāng)中,代碼如下
#?繪制圖表
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

END
推薦閱讀
牛逼!Python常用數(shù)據(jù)類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長文系列第②篇)
牛逼!Python函數(shù)和文件操作(長文系列第③篇)
牛逼!Python錯(cuò)誤、異常和模塊(長文系列第④篇)
吳恩達(dá)deeplearining.ai的經(jīng)典總結(jié)資料
Ps:從小程序直接獲取下載
