數據可視化的基礎語法

  • 2020 年 12 月 28 日
  • 筆記

數據可視化的基礎語法

可視化主要是以影像來展示數據間的關係,

常見的圖形種類有

  • 折線圖,散點圖,條形圖,直方圖,餅圖
  • 此外在接下來課程中還會用到箱線圖,熱力圖,蜘蛛圖,表示二元變數分布和成對關係的視圖。

今天我們要來了解折線圖,散點圖,條形圖,直方圖,餅圖和器特點。認識Matplotlib的影像結構,並以Matplotlib繪製折線圖為例來掌握設置輔助顯示層;此外,用Matplotlob設置輔助顯示層,內容還增添拓展部份,平時用到的不是很多,作為了解即可。

常見影像

折線圖

  • 以折線的上升或下降來表示統計數量的增減變化的統計圖

    特點:能夠顯示數據的變化趨勢,反映事物的變化情況。(變化)

散點圖(Scatter)

  • 用兩組數據構成多個坐標點,考察坐標點的分布,判斷兩變數之間是否存在某種關聯或總結坐標點的分布模式。

    特點:判斷變數之間是否存在數量關聯趨勢,展示離群點(分布規律)

條形圖

  • 排列在工作表的列或行中的數據可以繪製到柱狀圖中。

    特點:繪製連離散的數據,能夠一眼看出各個數據的大小,比較數據之間的差別。(統計/對比)

直方圖(Histogram)

  • 由一系列高度不等的縱向條紋或線段表示數據分布的情況。一般用橫軸表示數據範圍,縱軸表示分布情況。

    特點:繪製連續性的數據展示一組或者多組數據的分布狀況(統計)

餅圖(pie)

  • 用於表示不同分類的佔比情況,通過弧度大小來對比各種分類。

    特點:分類數據的佔比情況(佔比)

Matplotlib畫圖基礎

Matplotlib,它是一個Python 2D繪圖庫,它可以在各種平台上以各種硬拷貝格式和互動式環境生成出具有出版品質的圖形。只需幾行程式碼即可生成繪圖,直方圖,條形圖,散點圖等。

Matplotlib畫圖的簡單實現


# 導入模組
import matplotlib.pyplot as plt
# 在jupyter中執行的時候顯示圖片
#matplotlib inline
# 傳入x和y, 通過plot畫圖
plt.plot([3, 1, 7], [4, 5, 6])
# 在執行程式的時候展示圖形
plt.show()

傳入x和y時,括弧中的第一個列表是x軸上的值,第二個列表是y上的值。

運行結果:

折線圖

如何應用呢?

對Matplotlib影像結構的認識

在學習Matplotlib的過程中,大家一定會遇到這樣那樣的問題,

比如說

  • 背景圖怎麼設置?

  • 坐標軸怎麼設置?

  • 坐標軸上的刻度值怎麼設置?

    因此對於Matplotlib的影像結構組成我們要有一定的了解。通常情況下,我們可以將一副Matplotlib影像分成三層結構:

  1. 第一層是底層的容器層

    主要包括Canvas(畫板)底層、Figure(畫布)用戶操作第一層設置畫布的大小和背景顏色、Axes(繪圖區)獨立的坐標系;

  2. 第二層:輔助顯示層

    主要包括Axis(軸)、Spines(邊框線)、Tick(坐標軸刻度)、Grid(網格線)、Legend(圖例說明)、Title(標題)等,該層可通過set_axis_off()或set_frame_on(False)等方法設置不顯示。

    該層的設置可使影像顯示更加直觀更加容易被用戶理解,但又並不會對影像產生實質的影響。

  3. 第三層:影像層

    即通過plot、hist、contour、scatter等方法繪製的影像。

Matplotlib繪製折線圖

折線圖的繪製

程式碼解析:

x軸數值的產生使用range函數,開始數字是1,結束時7,不包含8。

折線的顏色和形狀設置

from matplotlib import pyplot as plt
x = range(1,8) # x軸的位置
y = [17, 17, 18, 15, 11, 11, 13]
# 傳入x和y, 通過plot畫折線圖
plt.plot(x, y, color='red',alpha=0.5,linestyle='--',linewidth=3)
plt.show()

'''基礎屬性設置
color='red' : 折線的顏色
alpha=0.5 : 折線的透明度(0-1)
linestyle='--' : 折線的樣式
linewidth=3 : 折線的寬度
'''
'''線的樣式
- 實線(solid)
-- 短線(dashed)
-. 短點相間線(dashdot)
:虛點線(dotted)
'''

運行結果:

折點樣式

折點形狀選擇:

標記maker            描述

『o』                 圓圈  
『.』                 點
『D』                 菱形  
『s』                 正方形
『h』                 六邊形1    
『*』                 星號
『H』                 六邊形2    
『d』                 小菱形
『_』                 水平線
『v』                 一角朝下的三角形
『8』                 八邊形
『<』                 一角朝左的三角形
『p』                 五邊形
『>』                 一角朝右的三角形
『,』                 像素  
『^』                 一角朝上的三角形
『+』                 加號  
『\  『               豎線
『None』,』』,』 『       無  
『x』                 X

設置圖片的大小和保存

from matplotlib import pyplot as plt
import random
x = range(2,20,2) # x軸的位置
y = [random.randint(15, 30) for i in x]
# 設置圖片的大小
'''
figsize:指定figure的寬和高,單位為英寸;
dpi參數指定繪圖對象的解析度,即每英寸多少個像素,預設值為80 1英寸等於2.5cm,A4紙是 21*30cm的紙張
'''
# 設置畫布對象
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y) # 傳入x和y, 通過plot畫圖
# 保存(注意:要放在show的上面,plt.show()會釋放figure資源,如果在顯示影像之後保存圖片將只能保存空圖片。)
plt.savefig('./t1.png')
#./表示放在當前python文件的目錄
plt.show()
# 圖片的格式也可以保存為svg這種矢量圖格式,這種矢量圖放在網頁中放大後不會有鋸齒
# plt.savefig('./t1.svg')

x軸的數值,使用range(),step為2,不包括20;

y軸的數值是一個列表表達式,由隨機數產生,import random之後,randint產生隨機整數,範圍是15-30。「for i in x」是一個循環,作用是表明y軸數值產生隨機數的次數,次數由x軸上數值的個數決定。

運行結果:

繪製x軸和y軸的刻度

在設置Y軸標籤時,標籤數值的取值範圍range(min(y),max(y)+1),這裡min()和max()時是函數,分別取y中的最小和最大值,由於range函數不包集合右邊的值,故加1。plt.yticks(range(min(y),max(y)+1),y_ticks_label)中,y_ticks_label表示y軸刻度產生的次數。

設置顯示中文

matplotlib只顯示英文,無法顯示中文,需要修改matplotlib的默認字體。通過模組font_manager使用中文字體可以解決。

以表示兩個小時內心臟每分鐘跳動變化為例,x軸需要加上標題「時間」,y軸「次數」,影像標題「每分鐘跳動次數」,如下圖所示:

一圖多線

拓展部分:一圖多個坐標系

# 方法add_subplot:給figure新增子圖

# 這裡引進的科學計算庫Numpy,把它看作一個[列表]即可,目的是要使用log方法畫log對數函數。
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1, 100) #與range()相同
#新建figure畫布對象,三個坐標軸(子圖)建立在同一個畫布上
fig=plt.figure(figsize=(20,10),dpi=80)

#利用畫布對象,在上面放置三個坐標系
#新建子圖1
ax1=fig.add_subplot(2,2,1)
ax1.plot(x, x)
#新建子圖2
ax2=fig.add_subplot(2,2,2)
ax2.plot(x, x ** 2) #x的二次方,如果是x**3是x的三次方
ax2.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)
#新建子圖3
ax3=fig.add_subplot(2,2,3)
ax3.plot(x, np.log(x))
plt.show()

在這裡解釋一下add_subplot(2,2,1)里的參數的含義。在一個畫布上放置三個圖,需要排列位置。

首先將一張圖,分成兩列,再分成兩行,總共劃分出四個格子,子圖1按照從左到右從上到下的順序放在第一個格子里。

運行結果:

拓展部分:設置坐標軸範圍

打卡格式

小作業

  • 1、說出你理解的五種常用影像的特點,你有沒有地方需要用得到呢?。

  • 2、運用Matplotlib,自己編數據設計樣式,繪製一幅自己的折線圖。