<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你用plotly繪制excel中常見(jiàn)的16種圖表(上)

          共 21800字,需瀏覽 44分鐘

           ·

          2021-03-14 14:14











          大家好,我是老表~

          最近不是在學(xué)習(xí)plotly嘛,為了方便理解,我們這里取excel繪圖中常見(jiàn)的16種圖表為例,分兩期演示這些基礎(chǔ)圖表怎么用plotly進(jìn)行繪制!

          • 第一部分:柱狀圖、條形圖、折線圖、面積圖、餅圖與圓環(huán)圖、散點(diǎn)圖、氣泡圖和極坐標(biāo)(雷達(dá)圖)
          • 第二部分:樹(shù)狀圖、旭日?qǐng)D、直方圖、箱線圖、瀑布圖、漏斗圖、股價(jià)圖和地圖
          excel插入圖表

          今天,我們介紹第一部分8類(lèi)圖表的繪制。文末有全部演示代碼ipynb文件獲取方式。

          目錄:

          • 0. 準(zhǔn)備工作

          • 1. 柱狀圖

          • 2. 條形圖

          • 3. 折線圖

          • 4. 面積圖

          • 5. 餅圖與圓環(huán)圖

          • 6. 散點(diǎn)圖

          • 7. 氣泡圖

          • 8. 極坐標(biāo)(雷達(dá)圖)

          0. 準(zhǔn)備工作

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

          # 安裝plotly庫(kù)及plotly-orca庫(kù)
          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。我們這里用到的是后者,至于其中的區(qū)別,大概就是后者是高級(jí)版本,封裝了很多后者的復(fù)雜操作,可以直接用pandas.Dataframe類(lèi)型,是現(xiàn)在主推的。

          1. 柱狀圖

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

          柱狀圖:

          # 自帶數(shù)據(jù)集 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, # 數(shù)據(jù)集
              x='year'# x軸
              y='pop'# y軸
          )
          fig.show()
          柱狀圖

          堆疊柱狀圖

          # 自帶數(shù)據(jù)集 medals_long(長(zhǎng)表數(shù)據(jù))
          long_df = px.data.medals_long()
          long_df.head()
          medals_long
          # 堆疊柱狀圖 (使用長(zhǎng)表數(shù)據(jù),這種數(shù)據(jù)excel無(wú)法直接繪制堆疊圖)
          import plotly.express as px

          long_df = px.data.medals_long()
          fig = px.bar(
              long_df,  # 數(shù)據(jù)集
              x="nation",  # x軸
              y="count",  # y軸
              color="medal",  # 圖例顏色(這種情況下需要設(shè)定該參數(shù)根據(jù)medal類(lèi)型才區(qū)分,否則同色)
              title="堆疊柱狀圖 Long-Form Input"# 圖表標(biāo)題
          )
          fig.show()
          堆疊柱狀圖-長(zhǎng)表
          # 自帶數(shù)據(jù)集 medals_long(寬表數(shù)據(jù))
          wide_df = px.data.medals_wide()
          wide_df.head()
          寬表
          # 堆疊柱狀圖 (使用長(zhǎng)表數(shù)據(jù),這種數(shù)據(jù)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 設(shè)置為 group則為簇狀柱形圖,可選 stack(疊加)、group(并列)、overlay(覆蓋)、relative(相對(duì))
          )
          fig.show() 
          簇狀柱狀圖

          類(lèi)似于excel里柱狀圖填充色中依據(jù)數(shù)據(jù)點(diǎn)著色

          # 類(lèi)似于excel里柱狀圖填充色中依據(jù)數(shù)據(jù)點(diǎn)著色
          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'# 指定柱狀圖顏色根據(jù) lifeExp字段數(shù)值大小自動(dòng)著色
                       labels={'pop':'population of Canada'}, 
                       height=400# 圖表高度
                      )
          fig.show()
          數(shù)據(jù)點(diǎn)著色

          2. 條形圖

          條形圖其實(shí)就是柱狀圖轉(zhuǎn)個(gè)90度,橫著顯示唄。所以,本質(zhì)上是一樣的,唯一的區(qū)別:在 Bar 函數(shù)中設(shè)置orientation='h',其余參數(shù)與柱狀圖相同。

          # 在plotly繪圖中,條形圖與柱狀圖唯一的區(qū)別:在 Bar 函數(shù)中設(shè)置orientation='h',其余參數(shù)與柱狀圖相同
          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'# 指定柱狀圖顏色根據(jù) lifeExp字段數(shù)值大小自動(dòng)著色
                       labels={'pop':'population of Canada'}, 
                       height=600# 圖表高度
                       width=800# 圖表寬度
                       orientation='h' # 條形圖設(shè)置參數(shù)
                      )
          fig.show()
          條形圖

          3. 折線圖

          折線圖大致可以是畫(huà)一個(gè)折線圖或多條折線圖。

          單個(gè)折線圖:

          # 折線圖
          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'# 數(shù)據(jù)點(diǎn)顯示值
                        line_shape='linear'# 共有6種插值方式:'linear'、'spline'、'hv'、'vh'、'hvh'和'vhv。
                       )
          fig.update_traces(
              texttemplate='%{text:.2f}'# 數(shù)據(jù)點(diǎn)顯示值的格式
              textposition='top center'# 數(shù)據(jù)點(diǎn)顯示的位置:'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'# 按照國(guó)家區(qū)分
                       )
          fig.show()
          多折線圖

          分組多折線圖

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

          # 繪制各大洲每個(gè)國(guó)家人均壽命隨著時(shí)間變化曲線
          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'# 按照國(guó)家區(qū)分
                       )
          fig.show()
          面積圖

          5. 餅圖與圓環(huán)圖

          我們?cè)谟胑xcel繪制餅圖的時(shí)候,可以選擇既定配色方案,還可以自定義每個(gè)色塊的顏色。用plotly繪制的時(shí)候,這些自定義操作也是支持的。

          # 餅圖
          import plotly.express as px

          # 篩選2007年歐洲數(shù)據(jù)
          df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
          # 將小于200萬(wàn)的國(guó)家標(biāo)記為其他
          df.loc[df['pop'] < 2.e6'country'] = 'Other countries' 
          # 繪制餅圖
          fig = px.pie(df, values='pop', names='country', title='Population of European continent')
          fig.show()
          餅圖

          字段多條數(shù)據(jù)自動(dòng)處理:

          # 自帶數(shù)據(jù)集 tips,字段day下是星期,存在多條
          df = px.data.tips()
          df.head()
          tips數(shù)據(jù)預(yù)覽

          我們可以看到,在tips數(shù)據(jù)集中,day字段是星期,包含很多同星期的數(shù)據(jù)。在進(jìn)行餅圖繪制的時(shí)候,以day字段做分類(lèi),可以自動(dòng)實(shí)際聚合求和操作。

          # 如果 分類(lèi) 標(biāo)簽下有很多數(shù)據(jù),則會(huì)自動(dòng)進(jìn)行分組求和
          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()
          自動(dòng)聚合做餅圖

          設(shè)置配色方案:

          關(guān)于配色方案的更多選擇,大家可以參考《我又用Python爬取了4000+股票數(shù)據(jù),并用plotly繪制了樹(shù)狀熱力圖(treemap)》里介紹的內(nèi)容。

          # 設(shè)置配色方案
          import plotly.express as px

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

          我們也可以自定義每個(gè)色塊顏色

          # 自定義配色
          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()
          自定義每個(gè)色塊顏色

          在餅圖上顯示數(shù)據(jù)標(biāo)簽

          # 在餅圖上顯示數(shù)據(jù)標(biāo)簽
          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' # 數(shù)據(jù)標(biāo)簽顯示的內(nèi)容
                           )
          fig.show()
          在餅圖上顯示數(shù)據(jù)標(biāo)簽

          圓環(huán)圖

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

          # 圓環(huán)圖
          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# 設(shè)置空心半徑比例
                      )
          fig.show()
          圓環(huán)圖

          6. 散點(diǎn)圖

          散點(diǎn)圖是x和y均為數(shù)字列表情況下的坐標(biāo)點(diǎn)圖。

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

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

          fig = px.scatter(x=[01234], y=[014916])
          fig.show()
          列表數(shù)據(jù)散點(diǎn)圖

          給定pd.Dataframe類(lèi)型數(shù)據(jù)

          # 自帶數(shù)據(jù)集 iris
          df = px.data.iris()
          df.head()
          iris數(shù)據(jù)集
          pd.Dataframe類(lèi)型數(shù)據(jù)散點(diǎn)圖
          # 設(shè)置數(shù)據(jù)點(diǎn)顏色和大小
          import plotly.express as px
          df = px.data.iris()
          fig = px.scatter(df, x="sepal_width", y="sepal_length"
                           color="species"# 根據(jù)species字段區(qū)分顏色
                           size='petal_length'# 根據(jù)sepal_length設(shè)置大小
                           hover_data=['petal_width'],
                          )
          fig.show()
          設(shè)置數(shù)據(jù)點(diǎn)顏色額大小

          做個(gè)三角函數(shù)的圖:

          import plotly.express as px
          import numpy as np

          t = np.linspace(02*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",  # 設(shè)置氣泡大小依據(jù)字段pop
                           color="continent",
                           hover_name="country"
                           log_x=True
                           size_max=60#設(shè)置最大氣泡
                          )
          fig.show()
          氣泡圖

          8. 極坐標(biāo)(雷達(dá)圖)

          極坐標(biāo)下,可以用點(diǎn)或線進(jìn)行構(gòu)圖,繪制點(diǎn)則用px.scatter_polar,繪制線則用px.line_polar。

          # 自帶數(shù)據(jù)集 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"# 類(lèi)型
                                )
          fig.show()
          極坐標(biāo)

          著色和分組標(biāo)識(shí)

          import plotly.express as px

          df = px.data.wind()
          fig = px.scatter_polar(df, r="frequency", theta="direction",
                                 color="strength",  # 顏色根據(jù)strength著色
                                 symbol="strength",  # 符號(hào)根據(jù)strength區(qū)分
                                 size="frequency"# 大小根據(jù) frequency 區(qū)分
                                 color_discrete_sequence=px.colors.sequential.Plasma_r, # 設(shè)置配色方案
                                )
          fig.show()
          著色和分組標(biāo)識(shí)

          雷達(dá)圖

          # 雷達(dá)圖
          import plotly.express as px

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

          扇形區(qū)域圖

          # 扇形圖區(qū)域
          import plotly.express as px

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

          本文相關(guān)源碼獲取方式:掃下方二維碼,回復(fù):ploty即可獲取

          掃碼回復(fù):2021

          獲取最新學(xué)習(xí)資源


          推薦大家關(guān)注兩個(gè)公號(hào)

          分享程序員生活、互聯(lián)網(wǎng)資訊、理財(cái)復(fù)盤(pán)日記等
          專(zhuān)注于Java學(xué)習(xí)分享,從零和你一起學(xué)Java

          關(guān)注后回復(fù)【1024】
          送上獨(dú)家資料
          ◆◆◆
          歡迎大家圍觀朋友圈,我的微信:pythonbrief
                                        
          學(xué)習(xí)更多:
          整理了我開(kāi)始分享學(xué)習(xí)筆記到現(xiàn)在超過(guò)250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲(chóng)、機(jī)器學(xué)習(xí)等方面,別再說(shuō)不知道該從哪開(kāi)始,實(shí)戰(zhàn)哪里找了

          點(diǎn)贊”傳統(tǒng)美德不能丟 

          瀏覽 65
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.黄片视频 | 狠狠爽狠狠操 | 天天射天天干 | 亚洲欧洲免费在线观看 | www.国产视频在线观看 |