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

          別在Python中用Matplotlib和Seaborn作圖了,親,試試這個

          共 7516字,需瀏覽 16分鐘

           ·

          2023-02-04 14:35

          大數(shù)據(jù)文摘轉(zhuǎn)載數(shù)據(jù)派THU

          作者:Anmol Anmol

          翻譯:王闖(Chuck)

          校對:趙茹萱


          是時候升級你的可視化游戲了。


          數(shù)據(jù)可視化是人腦有效理解各種信息的最舒適、最直觀的方式。對于需要處理數(shù)據(jù)的人來說,能夠創(chuàng)建漂亮、直觀的可視化繪圖是一項(xiàng)非常重要的技能,這能夠有效地傳達(dá)數(shù)據(jù)洞察并推動后續(xù)執(zhí)行。


          R語言提供了一些很棒的數(shù)據(jù)可視化(ggplot2、leaflet)和儀表板(R Shiny)包,用這些可以創(chuàng)建漂亮的可視化繪圖。然而Python 在這方面顯得有點(diǎn)落后,因?yàn)?matplotlib 并不是一個很好的可視化包。


          Seaborn 是在 python 中創(chuàng)建靜態(tài)繪圖的一個很好的選擇,但不具備交互能力。靜態(tài)繪圖的一些限制是,我們無法放大繪圖中有趣的部分,也無法將鼠標(biāo)懸停在繪圖上以查看特定信息。


          于是,plotly包閃亮登場了!


          圖片來源:plotly


          Plotly 是一個 Python 庫,用于創(chuàng)建交互式、出版級別的可視化繪圖。Plotly不僅具有 matplotlib及seaborn 所缺少的交互功能,還提供了更多種類的圖表,例如:

          • 統(tǒng)計類圖表,如樹狀圖、誤差帶、平行類別圖等。
          • 科學(xué)類圖表,如等高線圖、對數(shù)圖等。
          • 財務(wù)類圖表,如漏斗圖、燭臺圖等。
          • 氣泡圖、密度圖等。
          • 生物信息類等其它圖表。


          以上解釋了為什么你應(yīng)該使用 plotly 而不是 matplotlib 或 seaborn 進(jìn)行繪圖。


          接下來,讓我們來點(diǎn)實(shí)際的!


          在下一節(jié)中,我們將使用gapminder數(shù)據(jù)來繪制印度和中國兩國的社會經(jīng)濟(jì)隨時間的發(fā)展情況。我們會在pandas dataframe上進(jìn)行數(shù)據(jù)選擇和操作,如果你還不熟悉 pandas,那么建議可以先學(xué)習(xí)“用python進(jìn)行數(shù)據(jù)分析”。


          你可以打開jupyter notebook,直接復(fù)制如下代碼,無需作任何修改。讓我們從安裝并導(dǎo)入plotly包開始。


          # install plotly
          ! pip install plotly


          # import plotly packages
          import plotly.graph_objects as go
          import plotly.express as px


          我們可以用 graph_objects 模塊創(chuàng)建不同類型的繪圖,并用express模塊來讀取gapminder數(shù)據(jù)?,F(xiàn)在,讓我們用 plotly express 讀取 gapminder 數(shù)據(jù)并查看前 5 行。


          ## reading the data and looking at the 1st five rows using head()
          df = px.data.gapminder()
          df.head()



          從上表可以看出,數(shù)據(jù)包含了不同國家不同年份的預(yù)期壽命、人口、人均GDP等信息。現(xiàn)在,我們將篩選出印度和中國的dataframe。


          # reading the datasets for India and China
          df_india = df[df['country'] == 'India']
          df_china = df[df['country'] == 'China']
          df_india

          ?

          下表是印度的數(shù)據(jù),時間跨度從 1952 年到 2007 年。


           

          印度和中國的人口


          現(xiàn)在,我們要創(chuàng)建一個條形圖,來展示印度和中國的人口隨時間的變化。使用 plotly graph 對象模塊創(chuàng)建繪圖,分成2個步驟:


          1. 設(shè)置圖形函數(shù),我們將在其中設(shè)置數(shù)據(jù)參數(shù)。數(shù)據(jù)參數(shù)設(shè)置為一個列表,其中包含印度和中國的條形圖函數(shù) (go.Bar)。在 bar 函數(shù)中,我們將 x 軸設(shè)置為年份列,將 y 軸設(shè)置為人口列,將標(biāo)記國家-顏色設(shè)置為印度-紅色,中國-藍(lán)色。


          2. 使用 update_layout 函數(shù)設(shè)置圖表的標(biāo)題、x 軸和 y 軸的文本。


          ## Using figure function to define the data argument and setting it to the bars for India and China
          fig = go.Figure(data = [go.Bar(x = df_india['year'], y = df_india['pop'], marker_color = 'indianred',name = 'India'),
                          go.Bar(x = df_china['year'], y = df_china['pop'], marker_color = 'blue',name = 'China')
                          ])


          ## Setting the titles, xaxis and yaxis
          fig.update_layout(title='Population of India and China over the years',
                             xaxis_title='Years',
                             yaxis_title='Population',
                             )


          fig


          作者繪圖


          從上面的圖表中,我們可以看到兩國的人口增長速度相似。


          預(yù)期壽命隨時間的變化


          每當(dāng)我們有時間序列數(shù)據(jù)(年/月/周等的量測值)時,折線圖是顯示趨勢的最佳選擇。利用以下代碼,我們展示了印度和中國多年來的預(yù)期壽命變化情況。


          # step 1 : Setting the figure function
          fig = go.Figure(data = [go.Scatter(x = df_india['year'], y = df_india['lifeExp'],\
                                              line = dict(color = 'firebrick', width = 4),
                                              text = df_india['country'], name = 'India'),
                                  go.Scatter(x = df_china['year'], y = df_china['lifeExp'],\
                                             line = dict(color = 'blue', width = 4), text = df_china['country'], name = 'China')])


             
          # step 2 : Setting the update_layout function   
          fig.update_layout(title='Life Expectency over the years',
                             xaxis_title='Years',
                             yaxis_title='Life Expectancy (years)',
          )
          fig


          作者繪圖


          兩國的預(yù)期壽命之間一直存在差距,除了 1960 年前后,中國的預(yù)期壽命因“三年困難時期”而突然下降。


          預(yù)期壽命與人均 GDP隨時間的變化


          當(dāng)我們想要查看 2 個連續(xù)(數(shù)字)特征之間的相互作用時,首選散點(diǎn)圖。


          在下面的代碼中,我們創(chuàng)建了這兩個國家的預(yù)期壽命和人均 GDP 之間的散點(diǎn)圖。


          fig = go.Figure(data = [go.Scatter(y = df_india['lifeExp'], x = df_india['gdpPercap'],\
                                             mode = 'markers', name = 'India')
                                  ,
                                 go.Scatter(y = df_china['lifeExp'], x = df_china['gdpPercap'],\
                                             mode = 'markers', name = 'China')
                                 ])


              
          fig.update_layout(title='Life Expectency vs GDP per Capita',
                             yaxis_title='Life Expectancy (years)',
                             xaxis_title='gdpPercap',
                             )
          fig


          作者繪圖


          對于這兩個國家來說,預(yù)期壽命都隨著人均 GDP 的增加而增加。與印度相比,中國人均GDP有了顯著提高。


          世界發(fā)展隨時間的變化:動畫展示


          利用氣泡圖,我們可以在 2D 圖上展示 3 個維度(x 軸、y 軸和氣泡大?。?。使用以下代碼,我們可以用 plotly express 模塊的散點(diǎn)函數(shù)創(chuàng)建氣泡圖。


          df = px.data.gapminder()


          fig = px.scatter(df, x = 'gdpPercap', y = 'lifeExp', size = 'pop',
                           color = 'continent', hover_name='country',
                           log_x= True, size_max=50, title = 'World Development in 2007',
                           animation_frame="year", animation_group="country", range_y = [25,90])


          fig.update_layout(xaxis = dict(showgrid=False), yaxis = dict(showgrid=False))


          fig


          讓我們學(xué)習(xí)一下函數(shù)的一些重要參數(shù):

          size:一個數(shù)值類變量的列,它代表氣泡的大小。

          color:一個分類變量的列,它代表氣泡的顏色。在我們的示例中,默認(rèn)為每個大陸分配一種顏色。

          log_x :將 X 軸(人均 GDP)設(shè)置為對數(shù)刻度。

          size_max:設(shè)置氣泡的最大尺寸。是尺寸標(biāo)準(zhǔn)化參數(shù)。

          animation_frame:用于標(biāo)記動畫幀的dataframe列的值。在我們的示例中,參數(shù)設(shè)置為年份列。

          animation_group:匹配“animation_group”的行將被作為在每一幀中描述相同的對象。我們想看看每個國家多年來的進(jìn)展情況,因此將其設(shè)置為國家列。



          這些年來,世界各國都取得了很大的發(fā)展。我們可以看到所有國家的預(yù)期壽命與人均 GDP(均隨時間增加)之間存在直接相關(guān)性。從這張圖表中你還可以發(fā)現(xiàn)更多,請在評論中分享你的發(fā)現(xiàn)。


          寫在最后!


          你還可以使用 plotly 創(chuàng)建交互式儀表板。Dash 是無需學(xué)習(xí) HTML、CSS 和 Javascript 即可快速創(chuàng)建漂亮Python 儀表板的繪圖框架。了解關(guān)于Dash的更多信息,見:https://bit.ly/311k37f.


          原文標(biāo)題:
          Don’t use Matplotlib or Seaborn for Your Python Plots
          原文鏈接: 
          https://medium.com/codex/dont-use-matplotlib-or-seaborn-for-your-python-plots-d5f03e750757
          編輯:于騰凱
          校對:楊學(xué)俊



          點(diǎn)「在看」的人都變好看了哦!

          瀏覽 54
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  麻豆免费视频 | 成人免费视频网 | 911在线无码精品秘 入口楼风 | 婷婷久久综合激情综合 | 一本大道东京热无码 |