手把手教你用plotly繪製excel中常見的8種圖表

2022-01-15 俊紅的數據分析之路

最近不是在學習plotly嘛,為了方便理解,我們這裡取excel繪圖中常見的16種圖表為例,分兩期演示這些基礎圖表怎麼用plotly進行繪製

第一部分:柱狀圖、條形圖、折線圖、面積圖、餅圖與圓環圖、散點圖、氣泡圖和極坐標(雷達圖)第二部分:樹狀圖、旭日圖、直方圖、箱線圖、瀑布圖、漏鬥圖、股價圖和地圖excel插入圖表

今天,我們介紹第一部分8類圖表的繪製。

目錄:

0. 準備工作

1. 柱狀圖

2. 條形圖

3. 折線圖

4. 面積圖

5. 餅圖與圓環圖

6. 散點圖

7. 氣泡圖

8. 極坐標(雷達圖)

0. 準備工作

我這邊是在jupyterlab中演示的plotly圖表,如果只安裝plotly是無法正常顯示圖表的(會顯示為空白),我們需要進行以下準備(以下命令均在cmd下操作即可):

# 安裝plotly庫及plotly-orca庫
pip install plotly
pip install plotly plotly-orca

# Basic JupyterLab renderer support
jupyter labextension install jupyterlab-plotly

# OPTIONAL: Jupyter widgets extension for FigureWidget support
jupyter labextension install @jupyter-widgets/jupyterlab-manager plotlywidget

參考:https://github.com/plotly/plotly.py

plotly有兩種繪圖方式,其一是原始graph_objects,其二是Plotly Express。我們這裡用到的是後者,至於其中的區別,大概就是後者是高級版本,封裝了很多後者的複雜操作,可以直接用pandas.Dataframe類型,是現在主推的。

1. 柱狀圖

我們知道,在excel插入圖表的時候,柱狀圖一般可選堆疊柱狀圖簇狀柱狀圖

柱狀圖:

# 自帶數據集 gapminder
data = px.data.gapminder()
data.head()

gapminder
# 柱狀圖
import plotly.express as px
data_canada = px.data.gapminder().query("country == 'Canada'")
fig = px.bar(
    data_canada, # 數據集
    x='year', # x軸
    y='pop', # y軸
)
fig.show()

柱狀圖

堆疊柱狀圖

# 自帶數據集 medals_long(長表數據)
long_df = px.data.medals_long()
long_df.head()

medals_long
# 堆疊柱狀圖 (使用長表數據,這種數據excel無法直接繪製堆疊圖)
import plotly.express as px

long_df = px.data.medals_long()
fig = px.bar(
    long_df,  # 數據集
    x="nation",  # x軸
    y="count",  # y軸
    color="medal",  # 圖例顏色(這種情況下需要設定該參數根據medal類型才區分,否則同色)
    title="堆疊柱狀圖 Long-Form Input", # 圖表標題
)
fig.show()

堆疊柱狀圖-長表
# 自帶數據集 medals_long(寬表數據)
wide_df = px.data.medals_wide()
wide_df.head()

寬表
# 堆疊柱狀圖 (使用長表數據,這種數據excel可以直接繪製堆疊圖)
import plotly.express as px

wide_df = px.data.medals_wide()
fig = px.bar(wide_df, x="nation", 
             y=["gold", "silver", "bronze"], 
             title="堆疊柱狀圖 Wide-Form Input")
fig.show()

堆疊柱狀圖-寬表

**簇狀柱狀圖 **:

# 簇狀柱狀圖
import plotly.express as px

long_df = px.data.medals_long()
fig = px.bar(
    long_df,  
    x="nation",  
    y="count",  
    color="medal",  
    title="簇狀柱狀圖 Long-Form Input", 
    barmode='group', # barmode 設置為 group則為簇狀柱形圖,可選 stack(疊加)、group(並列)、overlay(覆蓋)、relative(相對)
)
fig.show() 

簇狀柱狀圖

類似於excel裡柱狀圖填充色中依據數據點著色

# 類似於excel裡柱狀圖填充色中依據數據點著色
import plotly.express as px

data = px.data.gapminder()
data_canada = data[data.country == 'Canada']
fig = px.bar(data_canada, x='year', y='pop',
             hover_data=['lifeExp', 'gdpPercap'], 
             color='lifeExp', # 指定柱狀圖顏色根據 lifeExp欄位數值大小自動著色
             labels={'pop':'population of Canada'}, 
             height=400, # 圖表高度
            )
fig.show()

數據點著色2. 條形圖

條形圖其實就是柱狀圖轉個90度,橫著顯示唄。所以,本質上是一樣的,唯一的區別:在 Bar 函數中設置orientation='h',其餘參數與柱狀圖相同。

# 在plotly繪圖中,條形圖與柱狀圖唯一的區別:在 Bar 函數中設置orientation='h',其餘參數與柱狀圖相同
import plotly.express as px
data = px.data.gapminder()

data_canada = data[data.country == 'Canada']
fig = px.bar(data_canada, y='year', x='pop',
             hover_data=['lifeExp', 'gdpPercap'], 
             color='lifeExp', # 指定柱狀圖顏色根據 lifeExp欄位數值大小自動著色
             labels={'pop':'population of Canada'}, 
             height=600, # 圖表高度
             width=800, # 圖表寬度
             orientation='h' # 條形圖設置參數
            )
fig.show()

條形圖3. 折線圖

折線圖大致可以是畫一個折線圖或多條折線圖。

單個折線圖:

# 折線圖
import plotly.express as px

df = px.data.gapminder().query("country=='Canada'")
fig = px.line(df, x="year", y="lifeExp", title='Life expectancy in Canada',
              text='lifeExp', # 數據點顯示值
              line_shape='linear', # 共有6種插值方式:'linear'、'spline'、'hv'、'vh'、'hvh'和'vhv。
             )
fig.update_traces(
    texttemplate='%{text:.2f}', # 數據點顯示值的格式
    textposition='top center', # 數據點顯示的位置:'top left', 'top center', 'top right', 'middle left','middle center', 'middle right', 'bottom left', 'bottom center', 'bottom right'

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()

多折線圖

分組多折線圖

# 分組多折線圖
import plotly.express as px

# 繪製各大洲每個國家人均壽命隨著時間變化曲線
df = px.data.gapminder().query("continent != 'Asia'") # remove Asia for visibility
fig = px.line(df, x="year", y="lifeExp", 
              color="continent",
              line_group="country", 
              hover_name="country")
fig.show()

分組多折線圖4. 面積圖
import plotly.express as px

# 比如繪製大洋洲(有澳大利亞和紐西蘭)
df = px.data.gapminder().query("continent=='Oceania'")
fig = px.area(df, x="year", y="pop", 
              color='country', # 按照國家區分
             )
fig.show()

面積圖5. 餅圖與圓環圖

我們在用excel繪製餅圖的時候,可以選擇既定配色方案,還可以自定義每個色塊的顏色。用plotly繪製的時候,這些自定義操作也是支持的。

# 餅圖
import plotly.express as px

# 篩選2007年歐洲數據
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
# 將小於200萬的國家標記為其他
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' 
# 繪製餅圖
fig = px.pie(df, values='pop', names='country', title='Population of European continent')
fig.show()

餅圖

欄位多條數據自動處理:

# 自帶數據集 tips,欄位day下是星期,存在多條
df = px.data.tips()
df.head()

tips數據預覽

我們可以看到,在tips數據集中,day欄位是星期,包含很多同星期的數據。在進行餅圖繪製的時候,以day欄位做分類,可以自動實際聚合求和操作

# 如果 分類 標籤下有很多數據,則會自動進行分組求和
import plotly.express as px

# This dataframe has 244 lines, but 4 distinct values for `day`
df = px.data.tips()
fig = px.pie(df, values='tip', names='day')
fig.show()

自動聚合做餅圖

設置配色方案:

關於配色方案的更多選擇,大家可以參考《我又用Python爬取了4000+股票數據,並用plotly繪製了樹狀熱力圖(treemap)》裡介紹的內容。

# 設置配色方案
import plotly.express as px

df = px.data.tips()
fig = px.pie(df, values='tip', names='day', 
             color_discrete_sequence=px.colors.sequential.RdBu, # 設置配色方案
            )
fig.show()

設置配色方案作圖

我們也可以自定義每個色塊顏色

# 自定義配色
import plotly.express as px

df = px.data.tips()
fig = px.pie(df, values='tip', names='day', color='day',
             color_discrete_map={'Thur':'lightcyan',
                                 'Fri':'cyan',
                                 'Sat':'royalblue',
                                 'Sun':'darkblue'})
fig.show()

自定義每個色塊顏色

在餅圖上顯示數據標籤

# 在餅圖上顯示數據標籤
import plotly.express as px

df = px.data.gapminder().query("year == 2007").query("continent == 'Asia'")
fig = px.pie(df, values='pop', names='country',
             title='Population of American continent',
             hover_data=['lifeExp'], 
             labels={'lifeExp':'life expectancy'}
            )
fig.update_traces(textposition='inside', 
                  textinfo='percent+label' # 數據標籤顯示的內容
                 )
fig.show()

在餅圖上顯示數據標籤

圓環圖

圓環圖是指餅圖中間一定半徑的圓部分為空白,設置參數hole=int即可(0-1)。

# 圓環圖
import plotly.express as px

df = px.data.tips()
fig = px.pie(df, values='tip', names='day', 
             color_discrete_sequence=px.colors.sequential.RdBu,
             hole=.3, # 設置空心半徑比例
            )
fig.show()

圓環圖6. 散點圖

散點圖是x和y均為數字列表情況下的坐標點圖。

x軸和y軸均是列表的形式

# x軸和y軸均是列表的形式
import plotly.express as px

fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
fig.show()

列表數據散點圖

給定pd.Dataframe類型數據

# 自帶數據集 iris
df = px.data.iris()
df.head()

iris數據集pd.Dataframe類型數據散點圖
# 設置數據點顏色和大小
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", 
                 color="species", # 根據species欄位區分顏色
                 size='petal_length', # 根據sepal_length設置大小
                 hover_data=['petal_width'],
                )
fig.show()

設置數據點顏色額大小

做個三角函數的圖:

import plotly.express as px
import numpy as np

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

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

cos(t)7. 氣泡圖
# 氣泡圖
import plotly.express as px

df = px.data.gapminder()

fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp",
                 size="pop",  # 設置氣泡大小依據欄位pop
                 color="continent",
                 hover_name="country", 
                 log_x=True, 
                 size_max=60, #設置最大氣泡
                )
fig.show()

氣泡圖8. 極坐標(雷達圖)

極坐標下,可以用點或線進行構圖,繪製點則用px.scatter_polar,繪製線則用px.line_polar。

# 自帶數據集 wind
df = px.data.wind()
df.head()

wind
import plotly.express as px

df = px.data.wind()
fig = px.scatter_polar(df, 
                       r="frequency", # 半徑
                       theta="direction", # 類型
                      )
fig.show()

極坐標

著色和分組標識

import plotly.express as px

df = px.data.wind()
fig = px.scatter_polar(df, r="frequency", theta="direction",
                       color="strength",  # 顏色根據strength著色
                       symbol="strength",  # 符號根據strength區分
                       size="frequency", # 大小根據 frequency 區分
                       color_discrete_sequence=px.colors.sequential.Plasma_r, # 設置配色方案
                      )
fig.show()

著色和分組標識

雷達圖

# 雷達圖
import plotly.express as px

df = px.data.wind()
fig = px.line_polar(df, r="frequency", 
                    theta="direction", 
                    color="strength", 
                    line_close=True, # 線條是否閉環
                    color_discrete_sequence=px.colors.sequential.Plasma_r,
                    template="plotly_dark", # 主題模板 
                   )
fig.show()

雷達圖

扇形區域圖

# 扇形圖區域
import plotly.express as px

fig = px.scatter_polar(r=range(0,90,10), theta=range(0,90,10),
                       range_theta=[0,90], # 設定區域
                       start_angle=0, 
                       direction="counterclockwise", # 方位:'counterclockwise' 逆時針 ,'clockwise'順時針 
                      )
fig.show()

扇形區域圖對比Excel系列圖書累積銷量達15w冊,讓你輕鬆掌握數據分析技能,感興趣的同學可以直接在各大電商平臺搜索書名了解:

相關焦點

  • 使用Pandas,Seaborn和Plotly繪製漂亮的圖表
    figsize需要一個元組(例如,我經常使用的figsize =(12,8))· title:向圖表添加標題。 在大多數情況下,我用它來澄清圖表中顯示的內容,以便當我回到圖表上時,可以快速確定發生了什麼。 title需要一個字符串。· bins:允許覆蓋直方圖的bin寬度。
  • 圖表老是不會選擇,教你5招繪製出合適的Excel圖表,做圖表高手!
    今天芒種君就來給大家拆解 5 種時使用頻率超高的Excel圖表選擇方案,快來一起學習吧~「柱狀圖」作為國民級圖表,其實用頻率最高,但是也並不是在任何場景下都可以使用的,最常見的就是「類別比較」:反映時間趨勢,與折線圖比較的話,柱狀圖更能體現出每一個數據的細節部分;
  • 怎麼用excel計算百分比 手把手教你用excel計算百分比
    怎麼用excel計算百分比 手把手教你用excel計算百分比時間:2018-03-28 07:41   來源:未知   責任編輯:沫朵 川北在線核心提示:原標題:怎麼用excel計算百分比 手把手教你用excel計算百分比 怎麼用excel計算百分比?
  • Excel電子書分享16:49個圖表示例,助你隨心所欲繪製Excel圖表
    本電子書《49個圖表示例,助你隨心所欲繪製Excel圖表》詳細講解了49個Excel圖表製作案例,其中包含著大量的Excel圖表繪製技巧,能夠快速提高你的Excel圖表技能,值得你花時間好好研究。本書目錄1.標識圖中的最大值和最小值2.創建面板圖3.在柱狀圖中添加目標線4.創建動畫商業圖表5.精細繪製一個足球場6.畫圓7.畫圓(動畫繪製圓)8.圓形運動軌跡動畫9.圓形運動軌跡動畫(加強版)10.製作垂直間隔的堆積圖表
  • 如何使用Excel繪製圖表?
    第1步,選住要繪製圖形的數據,也就是數據透視表裡的數據。第2步,點擊」開始」選項卡下的「推薦的圖表」功能,就可以打開excel的所有圖表。第3步,在所有圖表裡我們選擇條形圖中的「簇狀條形圖」,因為這裡我們比較的是多個類別,所以選擇常用的條形圖,當然你也可以選擇柱狀圖。最後在數據旁邊生成了圖形。
  • 用 Python 讀取 Excel 自動生成 Web 可視化頁面!
    本次就給大家介紹一下如何用Python製作一個數據可視化網頁,使用到的是Streamlit庫。輕鬆的將一個Excel數據文件轉換為一個Web頁面,提供給所有人在線查看。2020年調查問卷')# 設置網頁子標題st.subheader('2020年各部門對生產部的評分情況')導入相關的Python包,pandas處理數據,streamlit用來生成網頁,plotly.express則是生成圖表,PIL讀取圖片。
  • 完全免費,簡化版Plotly推出,秒繪各類可視化圖表
    因此,Plotly推出了其簡化接口:Plotly_express,下文中統一簡稱為px。px是對Plotly.py的一種高級封裝,其內置了很多實用且現代的繪圖模板,用戶只需要調用簡單的API函數即可實用,從而快速繪製出漂亮且動態的可視化圖表。px是完全免費的,用戶可以任意使用它。
  • excel怎麼保留小數位數 手把手教你在Excel中設置保留的小數位數
    excel怎麼保留小數位數 手把手教你在Excel中設置保留的小數位數時間:2018-04-24 08:26   來源:系統天堂   責任編輯:沫朵 川北在線核心提示:原標題:excel怎麼保留小數位數 手把手教你在Excel中設置保留的小數位數 excel怎麼保留小數位數?
  • 如何在EXCEL中將單元格分成兩部分 手把手教你如何拆分單元格
    如何在EXCEL中將單元格分成兩部分 手把手教你如何拆分單元格時間:2017-07-11 13:36   來源:三聯   責任編輯:沫朵 川北在線核心提示:原標題:如何在EXCEL中將單元格分成兩部分 手把手教你如何拆分單元格 excel單元格分成2部分,excel把單元格分成兩個的辦法: 1、以下面這個表格為例
  • 【Excel技巧】F分布概率密度函數圖表的繪製
    利用Excel繪製t分布的概率密度函數的相同方式,可以繪製F分布的概率密度函數圖表。
  • 用Excel繪製存款增長率圖表
    下面,通過一個實例學習如何繪製如下圖所示的帶有增長率的圖表。完整的操作步驟如下:1.選定用於繪製圖表的單元格區域A1:D6。2.單擊「插入」選項卡上「圖表」組中的「柱形圖」。4.選定新生成的圖表。5.在「布局」選項卡上,「當前所選內容」組中,單擊以選定下拉列表中的「系列 "增速%"」。
  • Pandas可視化綜合指南:手把手從零教你繪製數據圖表
    在數據幀上進行操作的plot()函數只是matplotlib中plt.plot()函數的一個簡單包裝 ,可以幫助你在繪圖過程中省去那些長長的matplotlib代碼。最近,一位來自印度的小哥以2019年世界幸福指數的數據為例,詳細講述了在Pandas中plot()函數的各種參數設置的小技巧,熟練掌握這些技巧後,你也能繪製出豐富多彩的可視化圖表。
  • n種方式教你用python讀寫excel等數據文件
    點擊上方「濤哥聊Python」,選擇「星標」公眾號重磅乾貨,第一時間送達來源:Python大數據分析python處理數據文件的途徑有很多種,可以操作的文件類型主要包括文本文件(csv、txt、json等)、excel
  • 可視化神器Plotly
    Plotly是一款強大的可視化工具,可以繪製各種精美的交互圖,既可以在瀏覽器中查看和交互,有可以保存為pdf和png等格式。
  • 用DataFocus將Excel數據繪製圖表後的編輯與美化
    用DataFocus將Excel數據繪製圖表後的編輯與美化 前面的內容我們了解到,專業的圖表需要有 圖表類型簡單、觀點表達明確、細節處理到位、設計美觀等特點,以及了解了圖表的繪製方式和圖表的選擇。
  • Plotly,是時候表演真正的技術了(附代碼)
    在使用pip命令安裝了plotly和cufflinks之後,在Jupyter中運行以下命令:# Standard plotly importsimport plotly.plotly as pyimport plotly.graph_objs as gofrom plotly.offline import
  • 一目了然:如何在excel圖表中繪製合格線
    今天跟大家分享的excel圖表製作技巧可以達到下圖所示的效果,這樣誰達到目標,誰沒達到目標就一目了然:
  • Python繪圖庫講解:4大常用庫你準備學哪個?
    今天我們就用一篇文章,帶大家梳理matplotlib、seaborn、plotly、pyecharts的繪圖原理,讓大家學起來不再那麼費勁!注意:可以看到在上述的繪圖代碼中,你應該有這樣一個感受,圖中既有matplotlib的繪圖代碼,也有seaborn的繪圖代碼
  • Matplotlib繪製六種可視化圖表,值得收藏
    可視化圖表,有相當多種,但常見的也就下面幾種,其他比較複雜一點,大都也是基於如下幾種進行組合,變換出來的。對於初學者來說,很容易被這官網上眾多的圖表類型給嚇著了,由於種類太多,幾種圖表的繪製方法很有可能會混淆起來。
  • excel圖表應用技巧:不同類型圖表對數據表現的意義和作用
    Excel圖表類型非常多,並且各類型有相似之處。譬如折線圖和面積圖,都可以用來表達趨勢。那什麼時候更適合用面積圖,什麼時候更適合用折線圖呢?我來看看下面這篇文章吧!學習更多技巧,請收藏關注部落窩教育excel圖文教程。 今天不講技巧,講講每位Excel使用者都無法迴避的問題。