Python可視化工具Plotly的應(yīng)用教程
一.簡介
發(fā)展由來:
隨著信息技術(shù)的發(fā)展和硬件設(shè)備成本的降低,當(dāng)今的互聯(lián)網(wǎng)存在海量的數(shù)據(jù),要想快速從這些數(shù)據(jù)中獲取更多有效的信息,數(shù)據(jù)可視化是重要的一環(huán)。對(duì)于Python語言來說,比較傳統(tǒng)的數(shù)據(jù)可視化模塊是Matplotlib,但它存在不夠美觀、靜態(tài)性、不易分享等缺點(diǎn),限制了Python在數(shù)據(jù)可視化方面的發(fā)展。
為了解決這個(gè)問題,新型的動(dòng)態(tài)可視化開源模塊Plotly應(yīng)運(yùn)而生。由于Plotly具有動(dòng)態(tài)、美觀、易用、種類豐富等特性,所以一經(jīng)問世就受到開發(fā)人員的喜愛。
簡要說明
Plotly是Python 庫中一種互動(dòng),開源繪圖庫,也是基于javascript的繪圖庫,支持 40 多種獨(dú)特的圖表類型,效果美觀,其中涵蓋各種統(tǒng)計(jì)、財(cái)務(wù)、地理、科學(xué)和三維用例。
有在線和離線模式,易于保存與分享plotly的繪圖結(jié)果,并且可以與Web無縫集成;
ploty默認(rèn)的繪圖結(jié)果,是一個(gè)HTML網(wǎng)頁文件,通過瀏覽器可以直接查看;

二.各圖運(yùn)用
安裝:
pip install plotly
下面均在Jupyter Notebook中運(yùn)行
數(shù)據(jù)源:
import plotly import plotly.express as px import plotly.graph_objects as go import plotly.io as pio import pandas as pd import numpy as np # plotly內(nèi)置了數(shù)據(jù)集,方便大家不受數(shù)據(jù)分析思路的背景下,練手用 df=px.data.gapminder() df.head()
運(yùn)行結(jié)果:

1.柱狀圖
# 繪制中國歷年人口變化圖
# df_country=df.query('country=="China"')
df_country=df[df['country']=='China']
# 柱狀圖展示
fig=px.bar(df_country, # 數(shù)據(jù)源
x='year', # 橫坐標(biāo):年份
y='pop', # 縱坐標(biāo):人口
text='pop', # 說明:人口
color='lifeExp', # 顏色取值:根據(jù)平均壽命的值來取
hover_name='year', #控制點(diǎn)名稱:年份
)
fig
運(yùn)行結(jié)果:

# 注釋標(biāo)題
fig.update_layout(title_text='中國人口變遷史',
title_x=.5,
font=dict(family='simsun',
size=14,
color='#1d39c4')
)
# 注釋坐標(biāo)軸
fig.update_layout(xaxis_title='年份',
yaxis_title='人口數(shù)量')
fig
運(yùn)行結(jié)果:

#柱形圖文字格式
fig.update_traces(
textposition='outside',
texttemplate='%{text:,.2s}')
fig
運(yùn)行結(jié)果:

#利用customdata增加數(shù)據(jù)集
fig.update_traces(customdata=df[['lifeExp','gdpPercap']])
fig.update_traces(hovertemplate='Year: %{x}<br><br> Population: %{y}<br> Life Expectation: %{customdata[0]:,.2f}<br>GDP per capital: %{customdata[1]:,.2f}')
# 坐標(biāo)軸tick設(shè)置
fig.update_xaxes(tickangle=-45,tickfont=dict(family='arial',size=12))
fig
運(yùn)行結(jié)果:

# 設(shè)置間隙大小及文本大小
fig.update_layout(bargap=.4,
uniformtext_minsize=8,
uniformtext_mode='show')
# 設(shè)置注釋
fig.add_annotation(x='1982',
y=1000281000,
text='突破10億',
font=dict(color='red'))
fig.update_annotations(dict(xref='x',
yref='y',
showarrow=True),
arrowcolor='red',
arrowhead=4)
fig.show()
運(yùn)行結(jié)果:

2.散點(diǎn)圖
df_2007 = df[df["year"] == 2007] df_2007
運(yùn)行結(jié)果:

# 散點(diǎn)圖
px.scatter(df_2007, # 數(shù)據(jù)集
x="gdpPercap", # 橫坐標(biāo):人均GDP
y="lifeExp", # 縱坐標(biāo):平均壽命
color="continent" # 顏色取值:根據(jù)洲的值來取
)
運(yùn)行結(jié)果:

選擇一個(gè)區(qū)域,能將其放大


3.冒泡散點(diǎn)圖
# 冒泡散點(diǎn)圖
px.scatter(df_2007, # 繪圖DataFrame數(shù)據(jù)集
x="gdpPercap", # 橫坐標(biāo)
y="lifeExp", # 縱坐標(biāo)
color="continent", # 區(qū)分顏色
size="pop", # 區(qū)分圓的大小
size_max=60, # 散點(diǎn)大小
hover_name="country" # 控制點(diǎn)名稱
)
運(yùn)行結(jié)果:

4.旭日圖
# 旭日圖
px.sunburst(df_2007, # 繪圖數(shù)據(jù)
path=['continent', 'country'], # 指定路徑:從洲到國家
values='pop', # 數(shù)據(jù)大?。喝丝跀?shù)
color='lifeExp', # 顏色
hover_data=['iso_alpha'] # 顯示數(shù)據(jù)
)
運(yùn)行結(jié)果:

5.地圖圖形
# 設(shè)置地圖的圖形 px.choropleth( df, # 數(shù)據(jù) locations="iso_alpha", # 簡稱 color="lifeExp", # 顏色取值 hover_name="country", # 懸停數(shù)據(jù) animation_frame="year", # 播放按鈕設(shè)置 color_continuous_scale=px.colors.sequential.Plasma, # 顏色變化取值 projection="natural earth" # 使用的地圖設(shè)置 )
運(yùn)行結(jié)果:

三.實(shí)戰(zhàn)案例
使用泰坦里克號(hào)生存為例
import plotly import plotly.express as px import plotly.graph_objects as go import plotly.io as pio import pandas as pd import numpy as np
#數(shù)據(jù)讀取 path1='./dataSet/test.csv' path2='./dataSet/train.csv' test=pd.read_csv(path1) train=pd.read_csv(path2) #數(shù)據(jù)合并 data=pd.concat([test,train])
運(yùn)行結(jié)果:

# 展示數(shù)據(jù)中survived分布情況 df1=pd.DataFrame(data=data['Survived'].value_counts()) df1
運(yùn)行結(jié)果:

fig1=px.bar(df1,y='Survived',text='Survived',color_discrete_sequence=[['#B4C7EC','#14A577']])
fig1.update_layout(title='Survival Status in Titanic',
title_x=.5,
xaxis_title='Passenger survival status',
yaxis_title='Numbers',
font=dict(family='arial',color='#000000',size=12),
bargap=.5)
fig1.update_xaxes(tick0=0, #設(shè)置X軸起點(diǎn),防止從負(fù)數(shù)開始
dtick=1, #設(shè)置間隔,防止出現(xiàn)0.5間隔
tickvals=[0,1], #設(shè)置tick數(shù)值,為了重命名
ticktext=['Drowned','Suvived'],#重命名系列index
tickfont=dict(family='arial',color='#000000',size=14))
fig1.update_yaxes(range=[0,650]) #設(shè)置Y軸區(qū)間,使圖形不至于視覺上壓迫
fig1.update_traces(textposition='outside',
textfont_size=16,
textfont_color=['#8C1004','#007046'])
fig1.show()
運(yùn)行結(jié)果:

# 以survived 與sex為例,展示各性別下,生存與死亡的相對(duì)關(guān)系。 df_sex=pd.DataFrame(data=data.groupby(['Survived','Sex'])['PassengerId'].count()) df_sex=df_sex.reset_index() df_sex
運(yùn)行結(jié)果:

fig_sex1=px.bar(df_sex,x='Survived',y='PassengerId',color='Sex',barmode='group',text='PassengerId',
color_discrete_map={'female':'#F17F0B','male':'#0072E5'})
fig_sex1.update_traces(textposition='outside',
textfont_size=14,
textfont_color=['#8C1004','#007046'])
fig_sex1.update_xaxes(
tickvals=[0,1], #設(shè)置tick數(shù)值,為了重命名
ticktext=['Drowned','Suvived'],#重命名系列index
tickfont=dict(family='arial',
color='#000000',
size=14))
fig_sex1.update_layout(title='Overall Suvival in terms of Sex',
title_x=.5,
bargap=.35,
xaxis_title='',
yaxis_title='Numbers of Passengers',
font=dict(family='arial',
color='#000000',
size=13))
fig_sex1.update_yaxes(range=[0,500],
dtick=100)
fig_sex1.show()
運(yùn)行結(jié)果:

fig_sex2=px.bar(df_sex,x='Sex',y='PassengerId',facet_col='Survived',text='PassengerId',
color_discrete_sequence=[['#F17F0B','#0072E5']])
fig_sex2.update_traces(textposition='outside',
textfont_size=14,)
fig_sex2.update_layout(title='Overall Suvival in terms of Sex',
title_x=.5,
bargap=.35,
yaxis_title='Numbers of Passengers',
font=dict(family='arial',
color='#000000',
size=13),
)
#取消自帶sex標(biāo)題
fig_sex2.update_layout(xaxis=dict(title=''),
xaxis2=dict(title=''))
fig_sex2.update_yaxes(range=[0,500],
dtick=100)
fig_sex2.for_each_annotation(lambda a:a.update(text=a.text.replace('Survived=0.0','Drowned')))
fig_sex2.for_each_annotation(lambda a:a.update(text=a.text.replace('Survived=1.0','Suvived')))
fig_sex2.update_layout(annotations=[dict(font=dict(size=16,
color='#002CB2'))])
fig_sex2.show()
運(yùn)行結(jié)果:

# 以survived 與pclass為例,展示各艙位等級(jí)下,生存與死亡的相對(duì)關(guān)系。 df_pclass=pd.DataFrame(data=data.groupby(['Survived','Pclass'])['PassengerId'].count()) df_pclass=df_pclass.reset_index() df_pclass
運(yùn)行結(jié)果:

fig_sex1=px.bar(df_pclass,x='Survived',y='PassengerId',color='Pclass',barmode='group',text='PassengerId',
color_discrete_map={'1':'#F17F0B','2':'#0072E5','3':'#8C1004'})
fig_sex1.update_traces(textposition='outside',
textfont_size=14,
textfont_color=['#8C1004','#007046'])
fig_sex1.update_xaxes(
tickvals=[0,1], #設(shè)置tick數(shù)值,為了重命名
ticktext=['Drowned','Suvived'],#重命名系列index
tickfont=dict(family='arial',
color='#000000',
size=14))
fig_sex1.update_layout(title='Overall Suvival in terms of Pclass',
title_x=.5,
bargap=.35,
xaxis_title='',
yaxis_title='Numbers of Passengers',
font=dict(family='arial',
color='#000000',
size=13))
fig_sex1.update_yaxes(range=[0,500],
dtick=100)
fig_sex1.show()
運(yùn)行結(jié)果:

以上就是Python可視化工具Plotly的應(yīng)用教程的詳細(xì)內(nèi)容,更多關(guān)于Python Plotly的資料請關(guān)注腳本之家其它相關(guān)文章!
- python用plotly實(shí)現(xiàn)繪制局部放大圖
- Python使用Plotly繪制常見5種動(dòng)態(tài)交互式圖表
- Python+Plotly繪制精美的數(shù)據(jù)分析圖
- Python利用plotly繪制正二十面體詳解
- Python進(jìn)行數(shù)據(jù)可視化Plotly與Dash的應(yīng)用小結(jié)
- 詳解如何使用Python的Plotly庫進(jìn)行交互式圖形可視化
- python使用Plotly創(chuàng)建交互式數(shù)據(jù)可視化的操作步驟
- Python?Plotly庫安裝及使用教程
- Python-Plotly庫實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)可視化的示例代碼
相關(guān)文章
Python如何用NumPy讀取和保存點(diǎn)云數(shù)據(jù)
這篇文章主要介紹了Python如何用NumPy讀取和保存點(diǎn)云數(shù)據(jù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Python爬取網(wǎng)易云歌曲評(píng)論實(shí)現(xiàn)詞云圖
這篇文章主要為大家介紹了Python爬取網(wǎng)易云歌曲評(píng)論實(shí)現(xiàn)詞云分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Python報(bào)錯(cuò)TypeError: tuple indices must be
在Python編程過程中,我們經(jīng)常會(huì)遇到各種各樣的報(bào)錯(cuò)信息,其中,“TypeError: tuple indices must be integers or slices, not str”這個(gè)報(bào)錯(cuò),對(duì)于很多開發(fā)者來說,可能既熟悉又陌生,今天,我們就來深入探討一下這個(gè)報(bào)錯(cuò),看看它是如何產(chǎn)生的,以及如何快速有效地解決它2025-01-01
django haystack實(shí)現(xiàn)全文檢索的示例代碼
這篇文章主要介紹了django haystack實(shí)現(xiàn)全文檢索的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Flask框架Flask-Principal基本用法實(shí)例分析
這篇文章主要介紹了Flask框架Flask-Principal基本用法,結(jié)合實(shí)例形式分析了Flask框架flask-principal擴(kuò)展的基本功能、安裝、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-07-07
解決pytorch DataLoader num_workers出現(xiàn)的問題
今天小編就為大家分享一篇解決pytorch DataLoader num_workers出現(xiàn)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python解析excel文件存入sqlite數(shù)據(jù)庫的方法
最近工作中遇到一個(gè)需求,需要使用Python解析excel文件并存入sqlite,本文就實(shí)現(xiàn)的過程做個(gè)總結(jié)分享給大家,文中包括數(shù)據(jù)庫設(shè)計(jì)、建立數(shù)據(jù)庫、Python解析excel文件、Python讀取文件名并解析和將解析的數(shù)據(jù)存儲(chǔ)入庫,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11

