Python數據分析-Matplotlib圖標繪製

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

相關文章
相關標籤/搜索