Day05-黑馬學習篇(二)matplot基本繪圖函式集合
繪製網格:plt.grid()
引數:alpha=''設定透明度,(0~1,1為完全不透明,0為完全透明)
同時繪製兩個表格
只需要plot兩次即可,matplotlib會自動幫助使用者解決掉圖形的顏色區分問題
圖例(圖形區分)
1、新增圖例名:plot(x,y,laber = ' xxx ')
(1)loc :
best :0
upper right/left :1/2
lower left/right : 3/4
right :5
center left/right : 6/7
lower/upper center : 8/9
center : 10
3、plot中傳入引數color = ' '可以改變線條顏色(r 紅色 h綠色 b藍色 w 白色 c 青色 n 洋紅 y 黃色 k 黑色),linestyle = ' ' 可以改變線條風格(- 實線 -- 虛線 -. 點劃線 : 點虛線),linewidth = 可以改變線條粗細。alpha = 改變透明度(注:網格和plot畫圖中這些引數相同)
二、運用matplotlib畫其它圖形
不同圖形的應用場景
1、折線圖:以折線的上升或下降來表示統計數量的增減變化的統計圖
特點:能夠顯示資料的變化趨勢,反映事物的變化情況。(變化)
2、直方圖:由一系列高度不等的縱向條紋或線段來表示資料分佈的情況,一 般用橫軸表示資料範圍,縱軸表示分佈情況
特點:繪製連續性的資料,展示一組或多組資料分佈情況(統計)
3、條形圖:排列在工作表的列或者行中的資料可以繪製到條形圖中
特點:繪製離散型的資料,能夠一眼看出多個數據的大小,比較資料之間 的差別(統計)
4、散點圖:用兩組資料構成多個座標點,考察座標點的分佈,判斷兩變數之 間是否存在某種關聯或總結座標點的分佈模式
特點:判斷變數之間是否存在關聯關係,展示離群點(分佈規律)
繪製散點圖
1、繪圖函式:plt.scatter(x,y)
2、要點
(1)之所以要將兩組資料的range設定的中間差較大,是防止兩資料因為間隔原因而重疊
(2)設定的數字值要和字串個數一一對應,所以迴圈中引入的列表就是最初的數值列表
#散點圖 from matplotlib import pyplot as plt y_3 = [11,17,16,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23,23,24] y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6] x_3 = range(1,32) x_10 = range(51,82) #設定圖形大小 plt.figure(figsize=(20,8),dpi = 80) #繪製散點圖 plt.scatter(x_3,y_3,label ="3月份") plt.scatter(x_10,y_10,label = "10月份") #設定x軸刻度 _x = list(x_3)+list(x_10) _xtick = ["3月{}日".format(i) for i in x_3] _xtick += ["10月{}日".format(i-50) for i in x_3] plt.xticks(_x[::3],_xtick[::3],rotation = 45) #新增圖例 plt.legend(loc = "upper left") #新增描述資訊 plt.xlabel("時間") plt.ylabel("溫度") plt.title("標題") #展示圖形 plt.show()
繪製條形圖
1、繪圖函式:plt.bar(x,y,width=)
2、正常繪圖:
#條形圖 from matplotlib import pyplot as plt a = ["戰狼2","速度與激情8","功夫瑜伽","西遊伏妖篇","變形金剛5:最後的騎士","摔跤吧!爸爸","加勒比海盜5:死無對證","金剛:骷髏島","極限特工:終極迴歸","生化危機6:終章","乘風破浪","神偷奶爸3","智取威虎山","大鬧天竺","金剛狼3:殊死一戰","蜘蛛俠:英雄歸來","悟空傳","銀河護衛隊2","情聖","新木乃伊",] b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23] #繪製條形圖 plt.bar(a,b,width=0.3) plt.xticks(rotation = 90) #展示圖片 plt.show()
3、當遇見字串過長的時候我們需要讓圖片橫過來顯示:plt.barh(x,y,hight=)
#橫著的條形圖 from matplotlib import pyplot as plt a = ["戰狼2","速度與激情8","功夫瑜伽","西遊伏妖篇","變形金剛5:最後的騎士","摔跤吧!爸爸","加勒比海盜5:死無對證","金剛:骷髏島","極限特工:終極迴歸","生化危機6:終章","乘風破浪","神偷奶爸3","智取威虎山","大鬧天竺","金剛狼3:殊死一戰","蜘蛛俠:英雄歸來","悟空傳","銀河護衛隊2","情聖","新木乃伊",] b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23] #繪製條形圖 plt.barh(a,b,height=0.3,color = 'orange') #新增網格 plt.grid(alpha=0.3) #展示圖片 plt.show()
4、小測驗(注意需要控制數值資料之間的寬度防止出現條形圖重疊現象)
#小測驗 from matplotlib import pyplot as plt a = ["猩球崛起3:終極之戰","敦刻爾克","蜘蛛俠:英雄歸來","戰狼2"] b_16 = [15746,312,4497,319] b_15 = [12357,156,2045,168] b_14 = [2358,399,2358,362] bar_width = 0.2 x_14 = list(range(len(a))) x_15 = [i+bar_width for i in x_14] x_16 = [i+bar_width*2 for i in x_14] plt.bar(x_14,b_15,width=0.2,color = "orange",label = "9月14日") plt.bar(x_15,b_15,width=0.2,color = "blue",label = "9月15日") plt.bar(x_16,b_16,width=0.2,color = "pink",label = "9月16日") plt.legend(loc = "upper right") plt.xticks(x_15,a) plt.show()
繪製直方圖
1、繪圖函式:plt.hist(a,num_bins) 引數a為列表,引數num_bins代表組數
2、組數:資料的分組,當資料在100以內時,按資料多少常分為5-12組
3、組距:指每個想租的兩個端點之間的距離
4、組數 = 極差/組距
5、圖形繪製:頻數分佈和頻率分佈的區別在於hist()函式中的引數normed,改為True即可表示頻率分佈。此程式中存在一些刻度偏差問題。解決方法有多種(1)提前規定好正確的刻度(2)採用刻度間距定義組距的方式進行。
#頻數分佈直方圖 from matplotlib import pyplot as plt a=[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150] #計算組數 d = 3 #採用提前規定好組距的方式解決偏移問題 num_bins = (max(a)-min(a))//d plt.figure(figsize=(20,5),dpi=80) plt.hist(a,num_bins) #plt.hist(a,num_bins,normed = True)頻率分佈直方圖 # 採用刻度間距代替組距的方式解決偏移問題 # plt.hist(a,range(min(a),max(a)+d,d)) #設定x軸的刻度 plt.xticks(range(min(a),max(a)+d,d)) plt.grid() plt.show()
6、沒有進行過統計的資料才被用作繪製直方圖,如果資料已經被處理了,比如分了組,得出了每個組出現的頻數,我們用這些資料可以繪製成條形圖,修改條形圖的樣式呈現出直方圖的效果即可。(令條形圖的width=1可以使條形圖中間沒有間隔,達到形成直方圖的目的)
#條形圖與直方圖之間的轉換 from matplotlib import pyplot as plt interval = [0,5,10,15,20,25,30,35,40,45,60,90] width = [5,5,5,5,5,5,5,5,5,15,30,60] quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47] plt.figure(figsize=(20,5),dpi = 80) plt.bar(range(len(interval)),quantity,width=1) #設定x軸的刻度 _x = [i-0.5 for i in range(13)] _xtick_labels = interval+[150] plt.xticks(_x,_xtick_labels) plt.grid() plt.show()
7、應用場景
(1)使用者的年林分佈狀態
(2)一段時間內使用者點選次數的分佈狀態
(3)使用者活躍時間的分佈狀態