tft每日頭條

 > 生活

 > pythonmatplotlib怎麼學

pythonmatplotlib怎麼學

生活 更新时间:2024-12-29 01:24:49

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)1

轉發本文并私信我"Python",即可獲得Python資料以及各種心得(持續更新的)

前言

Python 可視化庫非常多,其中 matplotlib 是優缺點明顯的一個庫,優點是它非常靈活,缺點就是學習起來相對複雜。

最近在整理 matplotlib 入門所需核心知識點,會順帶編寫各種練習,其中主要關注如何獲得快速自學 matplotlib 的思路。

本文目标圖表如下:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)2

  • 每年小麥産量柱狀圖
  • 使用不同顔色标記最小與最大值的柱子
  • 畫出均值線

matplotlib 有2種風格的 api:

  1. MATLAB 風格,适合數據探索(圖表沒有過多細節要求,主要能反映數據情況即可)
  2. 面向對象風格,适合編寫重複自動化的圖表任務或封裝各種圖表功能

面向對象風格非常适合入門,因此我統一使用這種風格

本文所需要的庫如下:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)3


基本套路

本次使用 vega_datasets 的小麥數據:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)4

  • 其中 year 與 wheat 是我們需要的數據

類似在一張紙上畫出多種圖表,其中紙就是放置圖表的容器。在 matplotlib 中,這個容器稱為 Figure。

因此,代碼如下:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)5

  • 使用 plt.subplots() 能生成新的 figure 與 axes

"axes 是啥玩意?"

其中 axes 就是坐标系,可以把它看作是一個圖表。

subplots 默認參數下,隻會生成1個圖表,因此現在看起來就是"這張紙(Figure)被1個圖表(axes)占滿"。

顯然,我們需要在 axes 上添加圖表各種細節,最重要的當然是數據:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)6

  • 行2:在 axes 中畫柱狀圖(bar),第一個參數 x 軸使用 年份數據,第二個參數柱子高度使用 wheat 列數據

但是,圖表看起來有問題:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)7

  • 因為 df.year 是數值,圖表按照連續數字定位 x 軸上的位置

修改數據源的類型:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)8

現在,柱子像點樣子,但是 x 軸上亂七八糟:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)9

雖然此時圖表還沒有做大最終效果,但是基本形狀已經出來。

接下來基本是細節操作。

初學者難以入門 matplotlib 其中一個原因是,他的方法很多,很多時候你甚至不知道如何在網上查找。

接下來就是我要介紹的,如何利用 matplotlib 的幫助,推測出我們需要的方法


pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)10

各種細節的調整

首先,我們希望調整 x 軸上刻度标簽的顯示角度。

在 matplotlib 中對應這些概念:

  • 軸:axis
  • 刻度:tick
  • 标簽:label

通常我們的操作都是基于 axes ,因為我們總是在操作某個圖表。

看看這個 axes 有什麼可以讓我們操作的:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)11

  • 行1:直線 plt.setp(對象),可以查看對象有哪些可以設置的屬性
  • plt.setp 本身是一種批量修改值的快捷方法

看了一下,找到我們的目标:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)12

怎麼獲取,非常簡單:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)13

  • 前綴 下劃線 屬性名就能調用

"但是我們需要設置的是這些刻度标簽的角度,拿一堆刻度标簽有啥用?"

顯然,調整角度是需要設置這些"刻度标簽"對象的某個屬性,按照之前的方法,查看一下:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)14

  • axes.get_xticklabels()[0] ,随意拿出第一個刻度标簽對象,看看他裡面有啥玩意

果然,找到需要的屬性:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)15

萬事俱備了:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)16

  • 行5:從 axes 中獲取所有 x 軸的刻度标簽,注意這是一個 list
  • 行6: plt.setp 能批量對多個東西設置屬性,顯然我們這裡需要對前一行得到的多個刻度标簽設置 rotation 為 90 度

圖表成這樣子:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)17

"好像沒多大改善呀"

這是因為我們的"圖紙"不夠寬,空間有限,自然要壓縮"圖紙"中的内容。

适當調整"圖紙"的大小:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)18

  • 行3:傳入相應參數即可

現在效果如下:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)19

"我怎麼知道這個 subplots 方法中可以設置這個參數?"

這需要查看他的文檔,但是,之前我們已經學過查看某個東西可以調整的屬性。

我們可以換另一種方式實現一樣的效果。

用 plt.setp 方式,找到屬性 figwidth ,顯然這是"圖紙"的寬度,于是可以這麼寫:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)20

  • 行4: set_figwidth 即可設置
  • 怎麼設置高度,不用我教了吧

做到這裡,你應該會覺得任意使用一個可視化的庫,可能1、2行代碼即可完成,為啥要折騰這麼多?

matplotlib 的靈活在于控制細節。

現在剩下如何把最小與最大值的柱子标記不同顔色


設置顔色

面向對象設計,意味着圖表上你能看到的東西基本上都有一種對象代表他。

現在我們需要找到圖表生成的每個柱子。他們在哪裡?

原來,本身當我們調用 axes.bar 方法時,這個方法返回的就是這些小柱子:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)21

顯然,這是一個集合,我們需要修改其中的某幾個柱子的顔色,老規矩查到屬性:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)22

現在隻需要找到哪個是最小和最大值的柱子就行了:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)23

  • pandas 的方法就不多說了

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)24

均值線有特定的方法:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)25

這裡涉及一個比較高級的概念——投影與轉換,這裡不作介紹

圖表如下:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)26

接下來就是其他修飾


其他點綴

覺得圖表風格有些單調?

看看有哪些内置風格可以選:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)27

選用 ggplot 看看效果:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)28

  • plt.style.use 這種全局設置,最好放置在 import 之後

現在看起來有點辣眼睛:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)29

  • 因為每種内置風格都會有獨特的顔色闆,但我們畫柱狀圖時沒有指定顔色,因此當你使用其他風格時,可能會導緻默認圖表顔色改變的情況。以後使用調色闆時,我們嘗試動态從調色闆取出标記顔色(上面的橙色與紅色)

再設置一下 x、y 軸的名字與整個圖表的标題。

用之前的方式,從 axes 中可以輕易找到需要的屬性:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)30

  • 行18:當要對一個對象同時設置多個屬性時,使用 對象.set 方法,即可批量設置

但是,字體有些小:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)31

好吧,全局設置字體大小:

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)32

  • 必須在設置風格之後,再單獨修改某些設置

pythonmatplotlib怎麼學(Python可視化matplotlib最佳入門練習)33

接下來我會繼續編寫更多非常規要求的圖表,敬請關注!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved