Plotly 是一個加拿大 Plotly 公司所開發的繪圖套件, 提供以瀏覽器為基礎的互動式線上繪圖與統計分析功能 (與 Bokeh 類似), 可繪製超過 30 種的圖形, 涵蓋統計, 科學, 3D, 以及 SVG, 並能直接使用 Pandas 的 DataFrame 型態資料繪圖, 所繪製之圖形可在 HTML 網頁或 Jypyter Notebook 中呈現, 也可以與 Plotly 公司開發的 Dash 儀錶板套件整合. 除了 Python 外還支援 R, Julia, Matlab 等程式語言, 參考 :
Plotly 是免費與開放原始碼套件 (採 MIT 授權), 無須註冊也不用申請 token, 只要安裝即可免費使用 (沒有連上 Internet 也可使用), 其原始碼寄存於 GitHub :
參考書籍 :
# 文科生也可以輕鬆學習網路爬蟲 (碁峰 2021) 第 16 章
# Python Data Visualization Essentials Guide (BPB, 2021) CH 8
# Interactive Dashboards and Data Apps with Plotly and Dash (Packt 2021)
1. 安裝 plotly :
用 pip install 指令在終端機命令列安裝 plotly :
pip install plotly
C:\Users\User>pip install plotly
Collecting plotly
Downloading plotly-5.10.0-py2.py3-none-any.whl (15.2 MB)
---------------------------------------- 15.2/15.2 MB 7.3 MB/s eta 0:00:00
Requirement already satisfied: tenacity>=6.2.0 in c:\python37\lib\site-packages (from plotly) (8.0.1)
Installing collected packages: plotly
Successfully installed plotly-5.10.0
安裝 Plotly 公司的 dash 套件也會自動安裝 plotly.
2. 檢視 plotly 成員 :
先來檢視 plotly 套件的成員內容, 以下使用一個自訂模組 members, 其 list_members() 函式會列出模組或套件中的公開成員 (即屬性與方法), 參考 :
# Python 學習筆記 : 檢視物件成員與取得變數名稱字串的方法
>>> import plotly
>>> import members
>>> members.list_members(plotly)
colors <class 'module'>
data <class 'module'>
graph_objects <class 'module'>
graph_objs <class 'module'>
io <class 'module'>
offline <class 'module'>
tools <class 'module'>
utils <class 'module'>
可見 plotly 裡面包含了 8 個模組, 繪圖主要會用到 graph_objs 與 offline 模組, graph_objs 是 graph_objects 的簡名, 兩者是一樣的, Plotly 的各種圖形函式都放在此模組中 :
>>> members.list_members(plotly.graph_objs)
AngularAxis <class 'type'>
Annotation <class 'type'>
Annotations <class 'type'>
Bar <class 'type'>
Barpolar <class 'type'>
Box <class 'type'>
Candlestick <class 'type'>
Carpet <class 'type'>
Choropleth <class 'type'>
Choroplethmapbox <class 'type'>
ColorBar <class 'type'>
Cone <class 'type'>
Contour <class 'type'>
Contourcarpet <class 'type'>
Contours <class 'type'>
Data <class 'type'>
Densitymapbox <class 'type'>
ErrorX <class 'type'>
ErrorY <class 'type'>
ErrorZ <class 'type'>
Figure <class 'type'>
FigureWidget <class 'type'>
Font <class 'type'>
Frame <class 'type'>
Frames <class 'type'>
Funnel <class 'type'>
Funnelarea <class 'type'>
Heatmap <class 'type'>
Heatmapgl <class 'type'>
Histogram <class 'type'>
Histogram2d <class 'type'>
Histogram2dContour <class 'type'>
Histogram2dcontour <class 'type'>
Icicle <class 'type'>
Image <class 'type'>
Indicator <class 'type'>
Isosurface <class 'type'>
Layout <class 'type'>
Legend <class 'type'>
Line <class 'type'>
Margin <class 'type'>
Marker <class 'type'>
Mesh3d <class 'type'>
Ohlc <class 'type'>
Parcats <class 'type'>
Parcoords <class 'type'>
Pie <class 'type'>
Pointcloud <class 'type'>
RadialAxis <class 'type'>
Sankey <class 'type'>
Scatter <class 'type'>
Scatter3d <class 'type'>
Scattercarpet <class 'type'>
Scattergeo <class 'type'>
Scattergl <class 'type'>
Scattermapbox <class 'type'>
Scatterpolar <class 'type'>
Scatterpolargl <class 'type'>
Scattersmith <class 'type'>
Scatterternary <class 'type'>
Scene <class 'type'>
Splom <class 'type'>
Stream <class 'type'>
Streamtube <class 'type'>
Sunburst <class 'type'>
Surface <class 'type'>
Table <class 'type'>
Trace <class 'type'>
Treemap <class 'type'>
Violin <class 'type'>
Volume <class 'type'>
Waterfall <class 'type'>
XAxis <class 'type'>
XBins <class 'type'>
YAxis <class 'type'>
YBins <class 'type'>
ZAxis <class 'type'>
bar <class 'module'>
barpolar <class 'module'>
box <class 'module'>
candlestick <class 'module'>
carpet <class 'module'>
choropleth <class 'module'>
choroplethmapbox <class 'module'>
cone <class 'module'>
contour <class 'module'>
contourcarpet <class 'module'>
densitymapbox <class 'module'>
funnel <class 'module'>
funnelarea <class 'module'>
heatmap <class 'module'>
heatmapgl <class 'module'>
histogram <class 'module'>
histogram2d <class 'module'>
histogram2dcontour <class 'module'>
icicle <class 'module'>
image <class 'module'>
indicator <class 'module'>
isosurface <class 'module'>
layout <class 'module'>
mesh3d <class 'module'>
ohlc <class 'module'>
parcats <class 'module'>
parcoords <class 'module'>
pie <class 'module'>
pointcloud <class 'module'>
sankey <class 'module'>
scatter <class 'module'>
scatter3d <class 'module'>
scattercarpet <class 'module'>
scattergeo <class 'module'>
scattergl <class 'module'>
scattermapbox <class 'module'>
scatterpolar <class 'module'>
scatterpolargl <class 'module'>
scattersmith <class 'module'>
scatterternary <class 'module'>
splom <class 'module'>
streamtube <class 'module'>
sunburst <class 'module'>
surface <class 'module'>
table <class 'module'>
treemap <class 'module'>
violin <class 'module'>
volume <class 'module'>
waterfall <class 'module'>
而 offline 模組則提供離線繪圖渲染函式, 主要是透過呼叫 plotly.offline.plot() 函式去繪圖 :
>>> members.list_members(plotly.offline)
download_plotlyjs <class 'function'>
enable_mpl_offline <class 'function'>
get_plotlyjs <class 'function'>
get_plotlyjs_version <class 'function'>
init_notebook_mode <class 'function'>
iplot <class 'function'>
iplot_mpl <class 'function'>
offline <class 'module'>
plot <class 'function'>
plot_mpl <class 'function'>
除了使用 offline 模組的 plot() 之外, 也可以用 graph_objs 模組中的 Figure 類別來繪圖.
Plotly 自帶了 11 個測試用的小型資料集, 都放在 data 模組中, 內容如下 :
>>> members.list_members(plotly.data)
carshare <class 'function'>
election <class 'function'>
election_geojson <class 'function'>
experiment <class 'function'>
gapminder <class 'function'>
iris <class 'function'>
medals_long <class 'function'>
medals_wide <class 'function'>
stocks <class 'function'>
tips <class 'function'>
wind <class 'function'>
呼叫這些函式會傳回 DataFrame 型態的資料集, 例如著名的 iris 資料集 :
>>> df=plotly.data.iris()
>>> df
sepal_length sepal_width petal_length petal_width species species_id
0 5.1 3.5 1.4 0.2 setosa 1
1 4.9 3.0 1.4 0.2 setosa 1
2 4.7 3.2 1.3 0.2 setosa 1
3 4.6 3.1 1.5 0.2 setosa 1
4 5.0 3.6 1.4 0.2 setosa 1
.. ... ... ... ... ... ...
145 6.7 3.0 5.2 2.3 virginica 3
146 6.3 2.5 5.0 1.9 virginica 3
147 6.5 3.0 5.2 2.0 virginica 3
148 6.2 3.4 5.4 2.3 virginica 3
149 5.9 3.0 5.1 1.8 virginica 3
而 stocks 資料集則是收集 2018~2019 年美股 6 家公司的周收盤價 :
>>> df=plotly.data.stocks()
>>> df
date GOOG AAPL AMZN FB NFLX MSFT
0 2018-01-01 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
1 2018-01-08 1.018172 1.011943 1.061881 0.959968 1.053526 1.015988
2 2018-01-15 1.032008 1.019771 1.053240 0.970243 1.049860 1.020524
3 2018-01-22 1.066783 0.980057 1.140676 1.016858 1.307681 1.066561
4 2018-01-29 1.008773 0.917143 1.163374 1.018357 1.273537 1.040708
.. ... ... ... ... ... ... ...
100 2019-12-02 1.216280 1.546914 1.425061 1.075997 1.463641 1.720717
101 2019-12-09 1.222821 1.572286 1.432660 1.038855 1.421496 1.752239
102 2019-12-16 1.224418 1.596800 1.453455 1.104094 1.604362 1.784896
103 2019-12-23 1.226504 1.656000 1.521226 1.113728 1.567170 1.802472
104 2019-12-30 1.213014 1.678000 1.503360 1.098475 1.540883 1.788185
3. Plotly 繪圖的兩種方法 :
使用 Plotly 繪圖基本上有下列三種方式 :
(1). 使用 plotly.offline 模組的 plot() 函式 :
使用 Plotly 繪圖的第一種方式是使用 plotly.offline 模組的 plot(), 但要先從 plotly.graph_objs 模組中匯入要繪製的圖形函式, 例如散布圖為 Scatter(), 然後傳入 x, y 軸資料建立 Scatter 物件, 再將此物件傳入 plotly.offline.plot() 的 data 參數即可, 例如繪製體重與身高關係的散布圖 :
>>> import plotly
>>> import plotly.graph_objs as go
>>> weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
>>> height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
>>> data=go.Scatter(x=weight, y=height, mode='markers') # 建立 Scatter 圖形物件
>>> type(data)
<class 'plotly.graph_objs._scatter.Scatter'>
>>> plotly.offline.plot({"data": [data]}) # 繪製圖形
'temp-plot.html'
此處 x, y 軸資料都是表示體重與身高之串列, mode 參數設為 'markers' 表示散布圖只顯示數據點標誌, 不顯示連接各資料點之直線, 所建立之 Scatter 物件須放在串列中傳給 plotly.offline.plot() 參數字典的 data 屬性.
呼叫 plotly.offline.plot() 後會在目前工作目錄下建立一個暫時網頁檔來顯示此圖形, 並傳回此戰時網頁檔名稱, 然後開啟預設瀏覽器來呈現此網頁, 結果如下 :
當滑鼠移到資料點上面時, 就會跳出訊息框顯示 (x, y) 坐標軸數據, 這就是 Plotly 的互動式效果. 用記事本開啟所建立的暫時網頁檔, 可知它其實就是透過 Javascript 程式碼來繪圖與產生互動效果的 :
完整程式碼參考 :
測試 1-1 : 使用 plotly.offline 繪製散布圖 [看原始碼]
import plotly
import plotly.graph_objs as go
weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
data=go.Scatter(x=weight, y=height, mode='markers') # 建立 Scatter 圖形物件
plotly.offline.plot({"data": [data]}) # 繪製圖形
>>> import plotly
>>> import plotly.graph_objs as go
>>> weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
>>> height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
>>> data=go.Scatter(x=weight, y=height, mode='markers') # 建立 Scatter 圖形物件
>>> layout=go.Layout(title='The Relation of Weight and Height') # 建立 Layout 物件
>>> type(layout)
<class 'plotly.graph_objs._layout.Layout'>
>>> plotly.offline.plot({"data": [data], "layout": layout})
'temp-plot.html'
結果如下 :
可見標題預設為靠左對齊.
完整程式碼參考 :
測試 1-2 : 使用 plotly.offline 繪製散布圖 (添加標題) [看原始碼]
import plotly
import plotly.graph_objs as go
weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
data=go.Scatter(x=weight, y=height, mode='markers') # 建立 Scatter 圖形物件
layout=go.Layout(title='The Relation of Weight and Height') # 建立 Layout 物件
plotly.offline.plot({"data": [data], "layout": layout})
(2). 使用 plotly.graph_objs 模組的 Figure 類別 :
Plotly 的 graph_objs 模組下的 Figure 類別也可以用來繪圖, 把圖形物件傳給其建構函式 Figure() 即可建立一個 Figure 物件, 然後呼叫其 show() 方法顯示圖形, 結果與上面使用 plotly.offline.plot() 一樣, 也會建立一個暫時網頁檔來顯示互動式圖形 :
>>> import plotly
>>> import plotly.graph_objs as go
>>> weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
>>> height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
>>> scatter=go.Scatter(x=weight, y=height, mode='markers') # 建立 Scatter 圖形物件
>>> fig=go.Figure(scatter) # 依據所傳入之圖形物件建立 Figure 物件
>>> type(fig)
<class 'plotly.graph_objs._figure.Figure'>
>>> fig.show() # 顯示圖形
完整程式碼參考 :
測試 1-2 : 使用 plotly.graph_objs.Figure 繪製散布圖 [看原始碼]
import plotly
import plotly.graph_objs as go
weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
scatter=go.Scatter(x=weight, y=height, mode='markers') # 建立 Scatter 圖形物件
fig=go.Figure(scatter) # 依據所傳入之圖形物件建立 Figure 物件
fig.show() # 顯示圖形
用 members 模組檢視 Figure 物件成員如下 :
>>> members.list_members(fig)
add_annotation <class 'method'>
add_bar <class 'method'>
add_barpolar <class 'method'>
add_box <class 'method'>
add_candlestick <class 'method'>
add_carpet <class 'method'>
add_choropleth <class 'method'>
add_choroplethmapbox <class 'method'>
add_cone <class 'method'>
add_contour <class 'method'>
add_contourcarpet <class 'method'>
add_densitymapbox <class 'method'>
add_funnel <class 'method'>
add_funnelarea <class 'method'>
add_heatmap <class 'method'>
add_heatmapgl <class 'method'>
add_histogram <class 'method'>
add_histogram2d <class 'method'>
add_histogram2dcontour <class 'method'>
add_hline <class 'method'>
add_hrect <class 'method'>
add_icicle <class 'method'>
add_image <class 'method'>
add_indicator <class 'method'>
add_isosurface <class 'method'>
add_layout_image <class 'method'>
add_mesh3d <class 'method'>
add_ohlc <class 'method'>
add_parcats <class 'method'>
add_parcoords <class 'method'>
add_pie <class 'method'>
add_pointcloud <class 'method'>
add_sankey <class 'method'>
add_scatter <class 'method'>
add_scatter3d <class 'method'>
add_scattercarpet <class 'method'>
add_scattergeo <class 'method'>
add_scattergl <class 'method'>
add_scattermapbox <class 'method'>
add_scatterpolar <class 'method'>
add_scatterpolargl <class 'method'>
add_scattersmith <class 'method'>
add_scatterternary <class 'method'>
add_selection <class 'method'>
add_shape <class 'method'>
add_splom <class 'method'>
add_streamtube <class 'method'>
add_sunburst <class 'method'>
add_surface <class 'method'>
add_table <class 'method'>
add_trace <class 'method'>
add_traces <class 'method'>
add_treemap <class 'method'>
add_violin <class 'method'>
add_vline <class 'method'>
add_volume <class 'method'>
add_vrect <class 'method'>
add_waterfall <class 'method'>
append_trace <class 'method'>
batch_animate <class 'method'>
batch_update <class 'method'>
data <class 'tuple'>
for_each_annotation <class 'method'>
for_each_coloraxis <class 'method'>
for_each_geo <class 'method'>
for_each_layout_image <class 'method'>
for_each_mapbox <class 'method'>
for_each_polar <class 'method'>
for_each_scene <class 'method'>
for_each_selection <class 'method'>
for_each_shape <class 'method'>
for_each_smith <class 'method'>
for_each_ternary <class 'method'>
for_each_trace <class 'method'>
for_each_xaxis <class 'method'>
for_each_yaxis <class 'method'>
frames <class 'tuple'>
full_figure_for_development <class 'method'>
get_subplot <class 'method'>
layout <class 'plotly.graph_objs._layout.Layout'>
plotly_relayout <class 'method'>
plotly_restyle <class 'method'>
plotly_update <class 'method'>
pop <class 'method'>
print_grid <class 'method'>
select_annotations <class 'method'>
select_coloraxes <class 'method'>
select_geos <class 'method'>
select_layout_images <class 'method'>
select_mapboxes <class 'method'>
select_polars <class 'method'>
select_scenes <class 'method'>
select_selections <class 'method'>
select_shapes <class 'method'>
select_smiths <class 'method'>
select_ternaries <class 'method'>
select_traces <class 'method'>
select_xaxes <class 'method'>
select_yaxes <class 'method'>
set_subplots <class 'method'>
show <class 'method'>
to_dict <class 'method'>
to_html <class 'method'>
to_image <class 'method'>
to_json <class 'method'>
to_ordered_dict <class 'method'>
to_plotly_json <class 'method'>
update <class 'method'>
update_annotations <class 'method'>
update_coloraxes <class 'method'>
update_geos <class 'method'>
update_layout <class 'method'>
update_layout_images <class 'method'>
update_mapboxes <class 'method'>
update_polars <class 'method'>
update_scenes <class 'method'>
update_selections <class 'method'>
update_shapes <class 'method'>
update_smiths <class 'method'>
update_ternaries <class 'method'>
update_traces <class 'method'>
update_xaxes <class 'method'>
update_yaxes <class 'method'>
write_html <class 'method'>
write_image <class 'method'>
write_json <class 'method'>
可見 Figure 物件圖供了非常豐富的繪圖相關方法, 例如要為圖形添加標題可以用 update_layout() 方法, 並傳入一個 title 參數字典, 屬性如下 :
- text : 設定標題文字
- xanchor : 用來指定標題的 x 軸的對齊方式, 可用 'left', 'center', 'right' 或 'auto'
- x : 標題的 x 軸位置 (0~1)
- y : 標題的 y 軸位置 (0~1)
例如 :
>>> import plotly
>>> import plotly.graph_objs as go
>>> weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
>>> height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
>>> scatter=go.Scatter(x=weight, y=height, mode='markers') # 建立 Scatter 圖形物件
>>> fig=go.Figure(scatter) # 依據所傳入之圖形物件建立 Figure 物件
>>> title={'text': 'The Relation of Weight and Height', 'x': 0.5, 'y':0.9, 'xanchor': 'center'}
>>> fig.update_layout(title=title)
Figure({
'data': [{'mode': 'markers',
'type': 'scatter',
'x': [49, 65, 53, 45, 56, 47, 52, 61],
'y': [159, 177, 156, 163, 164, 158, 166, 171]}],
'layout': {'template': '...',
'title': {'text': 'The Relation of Weight and Height', 'x': 0.5, 'xanchor': 'center', 'y': 0.9}}
})
>>> fig.show()
結果如下 :
(3). 使用 plotly.express 模組 :
以上兩種繪圖方法都是使用 Plotly 原生的繪圖函式, 需要設定的參數較多, 更方便的用法是透過 Plotly Express, 它原本是 Plotly 二次包裝的獨立套件, 以前需要用 pip install 安裝, 但在 Plotly 第 4 版後已被納入 Plotly 內, 只要安裝 Plotly 即可使用, 由於它的繪圖介面簡單易用, 可以快速繪製出各種圖形, 所以也是最被推薦的 Plotly 用法, 參考 :
用 type() 檢查 plotly.express 為模組, 但用 dir(plotly) 檢視卻看不到此模組, 奇怪 :
>>> import plotly
>>> type(plotly.express)
<class 'module'>
>>> dir(plotly)
['__version__', 'colors', 'data', 'graph_objects', 'graph_objs', 'io', 'offline', 'tools', 'utils']
Plotly Express 模組其實是利用 plotly.graph_objs 或 plotly_graph_objects 模組的原生繪圖函式進行二次包裝, 提供了超過 30 種更簡易呼叫的繪圖函式, 參考 :
這些函式都會回傳一個 Figure 物件, 呼叫其 show() 方法即可建立一個網頁來呈現圖形. 先用自訂的 members 模組檢視 Figure 物件成員 :
>>> members.list_members(plotly.express)
Constant <class 'type'>
IdentityMap <class 'type'>
NO_COLOR <class 'str'>
Range <class 'type'>
absolute_import <class '__future__._Feature'>
area <class 'function'>
bar <class 'function'>
bar_polar <class 'function'>
box <class 'function'>
choropleth <class 'function'>
choropleth_mapbox <class 'function'>
colors <class 'module'>
data <class 'module'>
defaults <class 'plotly.express._core.PxDefaults'>
density_contour <class 'function'>
density_heatmap <class 'function'>
density_mapbox <class 'function'>
ecdf <class 'function'>
funnel <class 'function'>
funnel_area <class 'function'>
get_trendline_results <class 'function'>
histogram <class 'function'>
icicle <class 'function'>
imshow <class 'function'>
imshow_utils <class 'module'>
line <class 'function'>
line_3d <class 'function'>
line_geo <class 'function'>
line_mapbox <class 'function'>
line_polar <class 'function'>
line_ternary <class 'function'>
optional_imports <class 'module'>
parallel_categories <class 'function'>
parallel_coordinates <class 'function'>
pd <class 'module'>
pie <class 'function'>
scatter <class 'function'>
scatter_3d <class 'function'>
scatter_geo <class 'function'>
scatter_mapbox <class 'function'>
scatter_matrix <class 'function'>
scatter_polar <class 'function'>
scatter_ternary <class 'function'>
set_mapbox_access_token <class 'function'>
strip <class 'function'>
sunburst <class 'function'>
timeline <class 'function'>
treemap <class 'function'>
trendline_functions <class 'module'>
violin <class 'function'>
其中 data 模組是內建的小型資料集, 它其實就是串接到 Plotly 本身的 data 模組, 內容雷容 :
>>> members.list_members(plotly.express.data)
absolute_import <class '__future__._Feature'>
carshare <class 'function'>
election <class 'function'>
election_geojson <class 'function'>
experiment <class 'function'>
gapminder <class 'function'>
iris <class 'function'>
medals_long <class 'function'>
medals_wide <class 'function'>
stocks <class 'function'>
tips <class 'function'>
wind <class 'function'>
使用 Plotly Express 繪圖需先匯入 plotly.express 模組, 通常取別名為 px :
import plotly.express as px
以上面所繪製的體重與身高關係散布圖為例, 只要呼叫 px.scatter() 時傳入字典或 DataFrame 資料, 並指定欄位名稱給 x, y 參數即可建立 Figure 圖形物件, 最後呼叫其 show() 方法就會建立一個網頁來顯示圖形, 例如 :
>>> import plotly.express as px
>>> weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
>>> height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
>>> data={'weight': weight, 'height': height} # 將資料打包成字典
>>> fig=px.scatter(data, x='weight', y='height') # 指定 x, y 軸欄位繪圖
>>> fig.show()
結果與上面是一樣的 :
import plotly.express as px
weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
data={'weight': weight, 'height': height}
fig=px.scatter(data, x='weight', y='height')
fig.show()
也可以傳入 DataFrame, 例如 :
>>> import pandas as pd
>>> fig=px.scatter(pd.DataFrame(data), x='weight', y='height')
>>> fig.show()
完整程式碼參考 :
import pandas as pd
import plotly.express as px
weight=[49, 65, 53, 45, 56, 47, 52, 61] # 體重
height=[159, 177, 156, 163, 164, 158, 166, 171] # 身高
data=pd.DataFrame({'weight': weight, 'height': height})
fig=px.scatter(data, x='weight', y='height')
fig.show()
可見如同其名, Plotly Express 確實能快速繪製所需圖形.
參考 :
# https://pypi.org/project/plotly/
# [資料分析&機器學習] 第2.5講:資料視覺化(Matplotlib, Seaborn, Plotly)
# 看過圖表社交平台嗎? - 使用 plot.ly 製作圖表
# [第 20 天] 資料視覺化(3)Bokeh
# R 語言使用者的 Python 學習筆記
# Getting Started with Plotly for Python
# [資料分析&機器學習] 第2.5講:資料視覺化(Matplotlib, Seaborn, Plotly)
# 看過圖表社交平台嗎? - 使用 plot.ly 製作圖表
# [第 20 天] 資料視覺化(3)Bokeh
# R 語言使用者的 Python 學習筆記
# Getting Started with Plotly for Python
沒有留言:
張貼留言