Matplotlib介紹python
Matplotlib是一個強大的Python繪圖和數據可視化的工具包。 數組
Matplotlib的主要功能dom
Matplotlib是python中的一個包,主要用於繪製2D圖形(固然也能夠繪製3D,可是須要額外安裝支持的工具包)函數
Matplotliban安裝、調用工具
安裝:pip install matplotlibspa
調用:import matplotlib.pyplot as plt3d
Plot函數繪製多條曲線code
一維參數對象
例如傳入一個list對象使用plot,打印輸出造成的圖像blog
a=[1,2,3]
plt.plot(a) #只有一個參數時,值表明y軸的值,x爲值對應的索引
plt.show()
結果:plot畫出的圖中橫座標是list的index,縱座標是list的value,他會在圖上造成三個點,而後將點連成線,因此它造成的是折線圖,由於list知足線性關係(y的值是連續的),因此造成的圖像是一個直線。
二維參數
例如傳入2個list對象使用plot,打印輸出造成的圖像
a=[1,2,3] b=[4,5,6] plt.plot(a,b) plt.show()
結果:
折線圖會根據傳入參數的變化,線形狀會發生變化
注意:傳入的2個參數數值位數必須一致,不然會出現ValueError報錯
設定線條風格(點線、虛線、圓點、顏色設置)
線型linestyle(-,-.,--,.) 點型marker(v,^,s,*,H,+,x,D,o,…) 顏色color(b,g,r,y,k,w,…)
1.默認是實現,能夠設置成點線和虛線
2.默認是藍色,能夠設置成其餘顏色
虛線 ' -- ' ,參數指定了線的類型爲虛線
a=[1,2,3] b=[4,5,8] plt.plot(a,b,'--') plt.show()
點線 ‘ * ’,參數制定了線的類型爲點線(plt.plot(a,b,'o'), o 表示圓點)
a=[1,2,3] b=[4,5,8] plt.plot(a,b,'*') plt.show()
顏色
例如設定紅色線條
a=[1,2,3] b=[4,5,8] plt.plot(a,b,'r') #plt.plot(a,b,'red') 也能夠直接寫顏色的英文單詞 plt.show()
形狀+顏色聯合設定,例如設定綠色+虛線線條
a=[1,2,3] b=[4,5,8] plt.plot(a,b,'g--') #綠色而且虛線 plt.show()
繪製多條曲線
#plot函數繪製多條曲線 標題:set title x軸: set xlabel y軸: set ylabel
只須要依次指定每組(兩兩)線條的x、y座標便可
#一個圖像中繪製多個線條 a=[1,2,3] b=[4,5,8] c=[7,8,6] d=[1,5,2] plt.plot(a,b,c,d,'r--') plt.show()
能夠給不一樣線條指定不一樣的風格
a=[1,2,3] b=[4,5,8] c=[7,8,6] d=[1,5,2] plt.plot(a,b,'bo',c,d,'r+') plt.show()
多曲線基礎操做演示
1)首先生成數據,繪製2條線
#一個窗口下繪製兩條線,並對其添加顯示內容 t=np.arange(0,2,0.1) print(t) print(t.size) #20 #np.sin()取傳入的參數的正弦 #np.pi 是一個常量,表明3.1415926... s=np.sin(t*np.pi) print(s) print(s.size) #20 ''' [ 0.00000000e+00 3.09016994e-01 5.87785252e-01 8.09016994e-01 9.51056516e-01 1.00000000e+00 9.51056516e-01 8.09016994e-01 5.87785252e-01 3.09016994e-01 1.22464680e-16 -3.09016994e-01 -5.87785252e-01 -8.09016994e-01 -9.51056516e-01 -1.00000000e+00 -9.51056516e-01 -8.09016994e-01 -5.87785252e-01 -3.09016994e-01] ''' plt.plot(t,s,'r--',t*2,s,'g--') plt.show()
顯示結果
2)爲x、y軸座標設置標籤label說明
plt.plot(t,s,'r--',t*2,s,'g--') plt.xlabel('x軸') plt.ylabel('y軸') plt.show()
結果:存在兩個問題 1):中文沒法識別 2):座標負號顯示可能會有問題
作數據分析時,能夠提早再開頭寫入這2行,避免中文、負號識別問題:
解決問題1:中文內容沒法識別問題,在創建圖標以前加入一行代碼
#解決中文標籤不顯示問題plt.rcParams['font.sans-serif'] = ['SimHei']
解決問題2:座標軸上負號沒法顯示的問題
#負號顯示問題 plt.rcParams['axes.unicode_minus'] = False
3)爲圖像指定title標題說明
plt.title('元素正弦圖示')
4)爲圖像指定圖例label(即每條線設置描述說明)
#分別爲2條線側面添加描述說明 plt.plot(t,s,'r--',label='線條一走向') plt.plot(t*2,s,'g--',label='線條二走向') plt.xlabel('x軸') plt.ylabel('y軸') plt.title('元素正弦圖示') #必定要加結束語 plt.legend() plt.show()
最終顯示結果
曲線圖操做展現初級
(1)numpy+matplotlib結合,根據提供的值得出x、y軸的顯示圖
import matplotlib.pyplot as plt import numpy as np import pandas as pd #實例1 #從[-1,1]中取50個等差值 x=np.linspace(-1,1,50) #print(x) y=2*x +1 #x:橫座標的值 y:縱座標的值 res1=plt.plot(x,y) print(res1) #[<matplotlib.lines.Line2D object at 0x0ACE2350>] 返回的是一個matplotlib.lines.Line2D對象 #將設置好的figure(圖形、形狀)顯示出來 plt.show()
結果爲
延伸:變化若是y=2^x,再次求最終的圖像顯示
x=np.linspace(-1,1,50) #y=2^x平方,由於不是同比增加,生成的圖像以下 y=2**x +1 plt.plot(x,y) plt.show()
結果爲
hist函數繪製頻數直方圖
實驗一:
第一步:生成一個100*100初始值爲0的二維數組
import matplotlib.pyplot as plt import numpy as np import pandas as pd import random 第一步:生成一個100*100初始值爲0的二維數組 data=np.zeros((100,100),dtype=int)
第二步:利用random模塊將數組中每一個值變爲0-20的隨機值
第二步:利用random模塊將數組中每一個值變爲0-20的隨機值 for i in range(len(data)): #拿到每一行數組的長度 for j in range(len(data[0])): #根據以上2個參數能夠一次循環取出數組中的沒一個參數,並經過下面操做給每一個參數隨機賦值 data[i][j] = random.randint(1,20) print('初始Numpy,data數組的變化') print(type(data)) #<class 'numpy.ndarray'>
第三步:將Numpy數組類型轉爲DataFrame類型(即讓數組有橫豎的座標)
第三步:將Numpy數組類型轉爲DataFrame類型(即讓數組有橫豎的座標) data_new=pd.DataFrame(data) print(data_new) ''' DataFrame變化後的改變 0 1 2 3 4 5 6 7 8 ... 91 92 93 94 95 96 97 98 99 0 12 5 13 3 19 4 1 4 10 ... 14 2 14 10 4 10 13 15 15 1 12 18 16 20 6 7 1 14 18 ... 4 15 19 8 20 16 15 8 12 2 15 9 1 3 18 12 20 20 9 ... 20 2 1 9 17 9 17 2 2 3 10 15 8 2 3 16 13 13 19 ... 10 14 15 17 4 7 2 11 9 4 1 3 6 10 11 14 3 10 13 ... 8 19 1 12 2 10 20 6 5 5 20 19 11 8 1 19 1 2 6 ... 1 16 18 7 17 15 20 15 2 6 7 14 18 2 14 18 2 14 15 ... 14 11 16 14 12 17 8 10 4 7 20 12 17 5 11 10 10 8 14 ... 7 20 1 5 10 15 18 13 10 8 17 16 14 5 7 11 5 16 8 ... 18 8 4 7 7 3 17 10 20 9 6 7 16 13 7 15 13 15 5 ... 7 5 9 8 7 1 14 15 17 10 1 10 9 5 5 11 16 20 10 ... 17 18 18 7 16 3 11 7 13 11 3 10 15 17 9 16 19 13 1 ... 5 5 18 1 7 16 15 13 4 12 13 10 18 17 16 10 12 16 7 ... 12 2 7 16 12 19 7 11 12 13 4 10 20 1 1 1 19 6 17 ... 16 5 19 12 16 14 18 14 13 14 9 13 18 6 10 8 9 4 1 ... 9 12 6 8 10 1 10 9 18 15 6 11 4 5 17 1 10 2 12 ... 20 1 17 8 7 9 17 19 14 16 9 2 17 4 17 16 8 16 3 ... 10 11 5 16 1 2 7 18 16 17 16 3 2 16 15 17 8 8 13 ... 17 4 11 14 9 12 12 5 14 18 9 3 18 1 7 20 1 18 14 ... 1 5 2 12 9 10 6 4 12 19 19 18 3 13 18 17 7 12 5 ... 15 2 3 19 8 5 3 7 14 20 20 15 5 14 1 19 10 7 16 ... 12 14 12 12 18 15 17 4 6 21 10 20 19 6 6 20 18 20 5 ... 19 6 20 9 4 15 16 20 5 22 14 12 2 3 4 14 6 2 16 ... 16 10 5 20 3 14 20 6 19 23 14 18 6 12 3 11 10 8 8 ... 9 2 7 13 13 14 3 13 1 24 2 16 3 20 4 15 15 2 9 ... 20 7 16 13 3 1 18 5 17 25 9 17 8 15 5 16 1 19 3 ... 17 8 7 4 2 13 4 13 14 26 16 12 7 19 13 1 19 16 7 ... 15 11 3 19 19 4 2 1 6 27 8 14 2 6 7 16 11 19 19 ... 10 7 9 12 18 17 14 12 9 28 6 14 12 13 18 20 10 9 12 ... 15 2 20 14 11 6 16 19 3 29 18 3 13 15 20 5 10 18 17 ... 5 17 11 20 10 15 3 12 9 .. .. .. .. .. .. .. .. .. .. ... .. .. .. .. .. .. .. .. .. 70 5 9 20 9 20 4 3 12 17 ... 10 6 17 14 1 9 6 10 10 71 11 10 17 14 19 2 4 19 5 ... 8 4 7 1 20 13 7 11 15 72 13 11 16 15 3 8 4 17 13 ... 6 8 20 3 12 8 14 20 7 73 2 19 6 1 12 2 14 10 14 ... 10 17 9 1 18 1 6 14 7 74 3 8 17 1 12 4 17 18 7 ... 16 10 15 6 16 3 5 8 17 75 1 15 4 9 20 5 16 9 20 ... 18 13 10 6 19 9 20 12 16 76 16 6 6 19 4 5 8 1 11 ... 17 17 20 6 14 1 4 5 1 77 15 4 16 19 8 4 11 10 12 ... 1 6 19 13 12 16 10 3 13 78 18 16 20 13 16 15 18 11 4 ... 4 12 5 17 16 18 15 17 10 79 20 1 18 6 3 7 19 6 10 ... 14 16 12 8 15 9 5 6 6 80 15 14 4 1 14 8 10 18 14 ... 13 10 18 16 5 8 11 7 4 81 3 19 1 8 13 8 20 19 8 ... 7 19 9 9 9 6 10 19 20 82 9 18 19 1 3 1 13 6 3 ... 8 14 7 5 14 3 7 5 11 83 15 5 14 13 18 3 1 5 10 ... 12 7 14 5 1 11 7 6 3 84 12 18 16 10 19 6 9 3 8 ... 19 7 1 7 9 12 6 20 13 85 16 16 2 17 3 3 8 15 2 ... 1 20 15 1 17 19 16 4 4 86 2 12 11 7 5 14 19 19 18 ... 3 4 16 2 8 6 13 18 11 87 10 13 19 20 6 17 3 20 7 ... 16 2 8 20 19 14 17 6 7 88 6 3 7 12 13 19 1 17 14 ... 14 10 18 12 14 14 4 12 8 89 16 8 19 12 14 15 2 11 19 ... 2 18 20 6 18 9 20 10 2 90 12 17 19 19 17 18 18 14 6 ... 7 13 16 5 3 16 10 4 11 91 16 1 13 13 4 12 18 12 4 ... 11 19 5 6 18 18 9 17 17 92 3 8 10 1 13 1 15 19 19 ... 20 18 15 5 14 12 13 16 8 93 11 9 12 10 4 2 14 6 16 ... 6 11 11 9 11 7 8 17 14 94 13 3 6 3 16 3 3 11 10 ... 8 6 17 17 14 9 7 4 5 95 2 3 9 17 1 14 17 3 18 ... 3 4 12 6 7 14 12 14 8 96 3 18 8 5 11 10 11 11 19 ... 2 13 15 14 18 9 11 13 19 97 2 3 5 15 5 7 13 4 16 ... 12 2 16 5 1 10 10 2 13 98 3 9 6 4 2 13 5 20 12 ... 6 20 14 7 6 4 10 12 14 99 20 16 3 12 14 11 14 7 10 ... 9 3 11 17 5 3 9 1 15 ''' print(type(data_new)) #<class 'pandas.core.frame.DataFrame'>
第四步:從DataFrame數組中取第1列的值
#拿到第一列的值 print('取第一列的值') print(data_new[0]) ''' 取第一列的值 0 12 1 12 2 15 3 10 4 1 5 20 6 7 7 20 8 17 9 6 10 1 11 3 12 13 13 4 14 9 15 6 16 9 17 16 18 9 19 19 20 20 21 10 22 14 23 14 24 2 25 9 26 16 27 8 28 6 29 18 .. 70 5 71 11 72 13 73 2 74 3 75 1 76 16 77 15 78 18 79 20 80 15 81 3 82 9 83 15 84 12 85 16 86 2 87 10 88 6 89 16 90 12 91 16 92 3 93 11 94 13 95 2 96 3 97 2 98 3 99 20 Name: 0, Length: 100, dtype: int32 '''
第五步:經過value_counts()對第四步數據進行處理,得出數值與頻數的對應關係表,以下
#注意value_counts函數統計一個series上的數據狀況 data_new=data_new[0].value_counts() data_new=data_new.sort_index() print('繪製DataFrame數組第一列中數值與頻率的對應關係柱狀圖') print(data_new) ''' (數值) (頻數) 1 5 2 7 3 12 4 4 5 2 6 6 7 1 8 4 9 5 10 5 11 3 12 4 13 5 14 4 15 6 16 7 17 3 18 3 19 6 20 8 Name: 0, dtype: int64 '''
第六步:利用plt.hist()繪製柱狀圖
經過DataFrame繪製第一列,數據——頻率柱狀圖
#經過DataFrame繪製第一列,數據——頻率柱狀圖 print('根據上面的data_new,繪製第一列數據與頻率的柱狀圖') plt.hist(data_new,bins=20) #bins指柱狀圖的柱數默認是10 plt.show()
經過DataFrame繪製第一列,數據——頻率柱狀圖
#經過Numpy繪製每一行,數據——頻率柱狀圖(橫軸:數據 縱軸:頻數) print('繪製Numpy,data[0]第一行數據與頻率的柱狀圖') plt.hist(data[0]) plt.show()