matplotlib入門--1(條形圖, 直方圖, 盒須圖, 餅圖)


作圖首先要進行數據的輸入,matplotlib包只提供作圖相關功能,本身並沒有數據讀入、輸出函數,針對各種試驗或統計文本數據輸入可以使用numpy提供的數據輸入函數。

# -*- coding: gbk -*-
"""
Created on Sun Jan 11 11:17:42 2015

@author: zhang
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = [u'SimHei']

#生成數據
dataOut = np.arange(24).reshape(4, 6)
print(dataOut)

#保存數據
np.savetxt('data.txt', dataOut, fmt = '%.1f')

#讀取數據
data = np.loadtxt('data.txt')
print(data)

plot 和 bar 函數

# -*- coding: gbk -*-
"""
Created on Sun Jan 11 11:33:14 2015

@author: zhang
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = [u'SimHei']

data = np.random.randint(1, 11, 5)
x = np.arange(len(data))

plt.plot(x, data, color = 'r')
plt.bar(x, data, alpha = .5, color = 'g')

plt.show()

結果圖片

image

餅圖

# -*- coding: gbk -*-
"""
Created on Sun Jan 11 11:33:14 2015

@author: zhang
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = [u'SimHei']

data = np.random.randint(1, 11, 5)
x = np.arange(len(data))

#plt.plot(x, data, color = 'r')
#plt.bar(x, data, alpha = .5, color = 'g')
plt.pie(data, explode = [0,0,.2, 0, 0])

plt.show

image

在實際工作中經常要對多組數據進行對比分析,這樣需要在一個圖表里表示出多個數據集。plot函數多數據集表示方法:

# -*- coding: gbk -*-
"""
Created on Sun Jan 11 11:51:41 2015

@author: zhang
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = [u'SimHei']

data = np.random.randint(1, 5, (5, 2))
x = np.arange(len(data))

plt.plot(x, data[:, 0], '--', color = 'm')
plt.plot(x, data[:, 1], '-.', color = 'c')

plt.show()

image

這里用到了matplotlib中defered rendering的概念,它是指在繪圖過程中,只有你調用到plt.plot函數是其它的繪圖指令才會起效。

也可以通過對條形圖的定制實現數據對比,主要有這幾種類型 multy bar chart;stack bar chart和back to back bar chart

# -*- coding: gbk -*-
"""
Created on Sun Jan 11 12:03:57 2015

@author: zhang
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

data = np.random.randint(1, 5, [3, 4])
index = np.arange(data.shape[1])
color_index = ['r', 'g', 'b']

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize = (5, 12))

for i in range(data.shape[0]):
    ax1.bar(index + i*.25 + .1, data[i], width = .25, color = color_index[i],\
    alpha = .5)

for i in range(data.shape[0]):
    ax2.bar(index + .25, data[i], width = .5, color = color_index[i],\
    bottom = np.sum(data[:i], axis = 0), alpha = .7)
    
ax3.barh(index, data[0], color = 'r', alpha = .5)
ax3.barh(index, -data[1], color = 'b', alpha = .5)
    
plt.show()
plt.savefig('complex_bar_chart')

complex_bar_chart

統計中常用的兩種圖標是直方圖和盒須圖,matplotlib中有針對這兩種圖表的專門函數:hist和boxplot

# -*- coding: gbk -*-
"""
Created on Sun Jan 11 12:29:34 2015

@author: zhang
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = [u'SimHei']

data = np.random.randn(100)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize = (8, 4))

ax1.hist(data)
ax2.boxplot(data)

plt.savefig('hist_boxplot')
plt.show()

hist_boxplot

本文講到的所有matplotlib命令都有非常豐富的定制參數,我會在后面文章中講到,你也可以查看幫助文檔學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM