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

          再見,Matplotlib!

          共 3943字,需瀏覽 8分鐘

           ·

          2020-11-22 08:04

          如果你經(jīng)常使用Python進行數(shù)據(jù)分析,那么對于Pandas一定不會陌生,但是Pandas除了在數(shù)據(jù)處理上大放異彩,隨著版本的不斷更新,Pandas的繪圖功能在某些情況下甚至要比Matplotlib更加適用,本文就將介紹如何用Pandas更快的進行數(shù)據(jù)可視化!

            基本使用,學(xué)會制作套路

          首先我們使用pandas隨機生成示例數(shù)據(jù)

          import pandas as pd
          df= pd.DataFrame(np.random.rand(84), columns=['A','B','C','D'])

          現(xiàn)在只要一行代碼,即可完成柱狀圖的繪制df.plot.bar()

          同樣是這個圖,如果使用Matplotlib制作的話?

          import matplotlib.pyplot as plt

          x = np.array(df.index.tolist())
          y1 = df.A.tolist()
          y2 = df.B.tolist()
          y3 = df.C.tolist()
          y4 = df.D.tolist()
          y5 = df.E.tolist()

          total_width, n = 0.85
          width = total_width / n
          x = x - (total_width - width) / 2

          plt.bar(x, y1,  width=width, label='A')
          plt.bar(x + width, y2, width=width, label='B')
          plt.bar(x + 2*width, y3, width=width, label='C')
          plt.bar(x + 3*width, y4, width=width, label='D')
          plt.bar(x + 4*width, y5, width=width, label='E')

          plt.legend()
          plt.show()

          可以看到,雖然結(jié)果差不多,不過代碼量瞬間就上去了,如果你是Matplotlib高手可能會用更簡潔的代碼制作,但一定沒有pandas一行代碼來的方便!

            更多圖表,一覽Pandas強大

          下面我們繼續(xù)看看,一行pandas代碼能做出哪些常用的圖!

          堆疊柱狀圖,添加一個參數(shù)即可df.plot.barh(stacked=True)

          堆疊面積圖df.plot.area(stacked=True,alpha = 0.9)

          密度估計圖df.plot.kde()

          直方圖的話,我們需要換一組數(shù)據(jù)

          df = pd.DataFrame({'a': np.random.randn(1000) + 1,
                             'b': np.random.randn(1000),
                             'c': np.random.randn(1000) - 1},
                            columns=['a''b''c'])

          下面,兩行代碼就能制作堆疊/不堆疊的直方圖

          df.plot.hist(stacked=True, bins=20)
          df.plot.hist(alpha=0.5)

          當然包括什么箱線圖、散點圖等常用圖形,都可以通過一行代碼輕松搞定?

          df.plot.box()
          df['value'].plot()
          df.plot.scatter()
          data.plot.hexbin(x='A',y='B')

          制作子圖可以嗎? 只需要設(shè)置subplots=True就行了,子圖位置、大小調(diào)整方式和Matplotlib設(shè)置一樣!

          data.plot(subplots=True,layout=(32), figsize=(158));

          更多的圖表,本文就不再一一展示,從官方文檔中可以看到(我的版本是0.23.4),Pandas一共支持14種常見圖表的直接繪制,感興趣的讀者可以進一步閱讀官方文檔!

          其實對圖片敏感的讀者可以發(fā)現(xiàn),這不就是基于Matplotlib做出來的嗎?所以它支持像調(diào)整Matplotlib圖表一樣,在作圖時修改一些參數(shù)來控制圖片的大小、圖例、顏色、位置等因素。

            修改主題,解鎖酷炫樣式

          最后,如果你覺得默認生成的圖表不夠好看(我是這么覺得),而它又是基于Matoplotlib制作的,所以我們可以使用同樣套著Matplotlib殼的Seaborn調(diào)色板,從而調(diào)整圖片主題。

          還是上面的數(shù)據(jù),下面讓我們換個主題重新繪制

          import seaborn as sns
          sns.set_palette("pastel", 8)
          import seaborn as sns
          sns.set_palette("Blues_r", 8)
          import seaborn as sns
          sns.set_palette("magma", 8)

          上面是我常用的幾種配色,更多的顏色搭配你可以在seaborn相關(guān)文檔中找到并使用!

          以上就是關(guān)于如何在使用Python更快速的對數(shù)據(jù)進行可視化,我們可以發(fā)現(xiàn),在很多情況下,使用Pandas直接進行繪圖會顯得更加高效便捷!

          但本文的目的并不是讓你徹底放棄Matplotlib,在使用pandas繪圖時很多參數(shù)設(shè)置都需要參考Matplotlib,所以我們應(yīng)該在點亮這項技能后,能根數(shù)據(jù)和場景的不同,選擇一個最合適的工具來完成可視化!

          -END-

          文末推薦一本書《趣學(xué)Python算法100例專為Python初學(xué)者量身打造!詳解100個趣味編程算法實例,培養(yǎng)編程興趣,拓寬編程思維,提高編程能力和算法設(shè)計能力。實例代碼完備,注釋詳盡,均通過了測試可以正常運行,點擊下方圖片可以直達購買頁面查看本書詳情!

          作為早起Python粉絲的福利,我將送出上方圖書5本。但由于留言功能暫時不能使用,如果你想?yún)⒓踊顒樱?strong>請掃碼添加早小起微信?,并備注【送書】

          瀏覽 140
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  欧美中文字幕在线视频 | 亚洲人妻综合网 | 日本特一级A片 | 蜜桃亚洲AV啪啪无码片 | 人人插人人射人人摸 |