利用python處理數(shù)據(jù)象踊,我們需要學(xué)習(xí)的至少有numpy莺奔、pandas鸠珠、matplotlib這三個工具。我們最開始學(xué)的是matplotlib锌介。
官方文檔:https://matplotlib.org
作圖參考文檔:https://matplotlib.org/gallery/index.html
什么是matplotlib嗜诀?
Matplotlib是一個Python 2D繪圖庫,可以生成各種硬拷貝格式和跨平臺交互式環(huán)境的出版物質(zhì)量數(shù)據(jù)孔祸。Matplotlib可用于Python腳本隆敢,Python和IPython shell,Jupyter筆記本崔慧,Web應(yīng)用程序服務(wù)器和四個圖形用戶界面工具包拂蝎。這是官方文檔給出的定義
個人理解是:matplotlib就是一個python用來作圖的第三方工具(庫)。
在開始使用matplotlib之前惶室,我們需要先安裝它温自,一般如果裝的是anaconda的話,里邊都會有的皇钞,如果沒有就可以用
pip install matplotlib
下載
安裝好之后就可以使用了
怎么使用悼泌?
1、導(dǎo)入matplotlib下的包pyplot夹界,并另起名為plt馆里,目的是為了方便
from matplotlib import pyplot as plt #導(dǎo)入pyplot
或者用如下這種方式導(dǎo)入pyplot為plt
import matplotlib.pyplot as plt
兩種方法的效果是一樣的
2、取到數(shù)據(jù)可柿,這里是隨便寫的幾個數(shù)據(jù)(12小時的溫度)用來做例子也拜,在使用的時候根據(jù)實際的需求來取數(shù)據(jù)就行。
#數(shù)據(jù)在x軸的位置趾痘,是一個可迭代對象
x = range(2,26,2) #12小時
#數(shù)據(jù)在y軸的位置慢哈,是一個可迭代對象
y = [15,13,14.5,17,20,25,26,26,24,22,18,15] #對應(yīng)的溫度
3、用plt.plot()
畫圖永票,其中plot需要接受參數(shù)卵贱,前兩個參數(shù)是x、y坐標侣集,其中x和y都必須是可迭代的键俱,對象。例如如上的x和y世分,x軸和y軸的數(shù)據(jù)一起組成了所有要繪制出的坐標编振,這意味著我們會有12個坐標,分別是(2,15),(4,13),(6,14.5),(8,17),...
plt.plot(x,y) #傳入x和y臭埋,通過plot繪制出折線圖
4踪央、在畫完圖之后用plt.show()顯示出來
plt.show()
完整代碼
from matplotlib import pyplot as plt #導(dǎo)入pyplot
#數(shù)據(jù)在x軸的位置臀玄,是一個可迭代對象
x = range(2,26,2)
#數(shù)據(jù)在y軸的位置,是一個可迭代對象
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
#-->x軸和y軸的數(shù)據(jù)一起組成了所有要繪制出的坐標
#-->分別是(2,15),(4,13),(6,14.5),(8,17),...
plt.plot(x,y) #傳入x和y畅蹂,通過plot繪制出折線圖
# plt.bar(x,y) #根據(jù)傳入的x和y健无,通過bar繪制柱狀圖
plt.show() #在執(zhí)行程序的時候顯示圖形
運行得到的圖這樣就完成了一個簡單的作圖。但這并不是很完美的作圖液斜,一般我們都知道累贤,做一個圖要想跟很直觀的讓每個人都能看明白,那至少得有點標示吧少漆,比如:
1臼膏、這個圖的名字plt.title()
2、x示损、y軸分別表示什么plt.xlabel()
, plt.ylabel()
3讶请、圖例
有時候一個圖表里可能不止一組數(shù)據(jù),有多組屎媳,那我得知道每條線或者每個條形圖夺溢、直方圖表示的是哪組數(shù)據(jù)吧,這時候就需要用到圖例了烛谊,在plot中使用label設(shè)置名稱plt.plot(x,y,label='第一條線')
然后用plt.legend()
生成圖例风响,這個會在后邊使用。
在這里legend有幾個參數(shù)丹禀,如下:
'best' : 0, (only implemented for axes legends)(自適應(yīng)方式)
'upper right' : 1,
'upper left' : 2,
'lower left' : 3,
'lower right' : 4,
'right' : 5,
'center left' : 6,
'center right' : 7,
'lower center' : 8,
'upper center' : 9,
'center' : 10,
4状勤、x軸的刻度,使用plt.xticks()
設(shè)置,它需要參數(shù)双泪,第一個是傳入x軸的刻度持搜,例如直接傳入xplt.xticks(x)
,如果覺得刻度太密集焙矛,可以用這個方式來改善plt.xticks(x[::2])
5葫盼、這樣設(shè)置好刻度之后,但我想要更直接的看出x軸的情況村斟,所以這時候就得給x軸設(shè)置一些標示值(這個點的描述或解釋)贫导,方式是在plt.xticks(x)
的參數(shù)后邊緊跟對x軸的某個點描述的語句plt.xticks(x,_x_ticks)
,描述和刻度必須要是對應(yīng)的。即:一個刻度對應(yīng)一個描述蟆盹。他們的對應(yīng)關(guān)系必須寫對了孩灯,不然會出現(xiàn)描述與實際不一樣的情況,容易誤導(dǎo)看圖的人做出錯誤的判斷逾滥。做出錯誤的圖形峰档。
其中_x_ticks值是的個數(shù)是和x的值的個數(shù)對應(yīng)的。
這里還用到了一個參數(shù)rotation
這是用來設(shè)置描述的傾斜角度的(逆時針),rotation=45
表示逆時針旋轉(zhuǎn)45度讥巡。
問題:會出現(xiàn)中文亂碼
解決方法:
方法1掀亩、在windows上找到自己想用的字體,然后把路徑拷貝出來設(shè)置即可解決尚卫,缺點:涉及到中文的地方就需要設(shè)置一次
然后拷貝出他的路徑,包括名字外里。
做如下設(shè)置
from matplotlib import font_manager
#設(shè)置中文字體怎爵,在windows中找到自己想用的字體,然后把字體的路徑添加進來盅蝗,最后在需要的地方通過fontproperties=my_font使用即可
my_font=font_manager.FontProperties(fname='C:/Windows/Fonts/AdobeFangsongStd-Regular.otf')
在涉及中文的地方把fontproperties=my_font)
加進去即可,例如:
plt.title('折線圖',fontproperties=my_font)) #把中文字體加進去
方法2
直接在程序中加入如下代碼即可
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 用黑體顯示中文
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['axes.unicode_minus']=False # 正常顯示負號
下面是Windows的字體對應(yīng)名稱鳖链!
黑體 SimHei
微軟雅黑 Microsoft YaHei
微軟正黑體 Microsoft JhengHei
新宋體 NSimSun
新細明體 PMingLiU
細明體 MingLiU
標楷體 DFKai-SB
仿宋 FangSong
楷體 KaiTi
仿宋_GB2312 FangSong_GB2312
楷體_GB2312 KaiTi_GB2312
加入后就不用修改任何一個地方了。
問題說完了墩莫,接下來開始作圖
1芙委、折線圖plot
練習(xí)1、利用折線圖顯示出12小時內(nèi)的氣溫變化
from matplotlib import pyplot as plt #導(dǎo)入pyplot
#數(shù)據(jù)在x軸的位置狂秦,是一個可迭代對象
x = range(2,26,2)
#數(shù)據(jù)在y軸的位置灌侣,是一個可迭代對象
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
#-->x軸和y軸的數(shù)據(jù)一起組成了所有要繪制出的坐標
#-->分別是(2,15),(4,13),(6,14.5),(8,17),...
plt.plot(x,y) #傳入x和y,通過plot繪制出折線圖
# plt.bar(x,y) #根據(jù)傳入的x和y裂问,通過bar繪制柱狀圖
plt.show() #在執(zhí)行程序的時候顯示圖形
結(jié)果:練習(xí)2侧啼、設(shè)置圖像的大小和像素并保存,設(shè)置x軸刻度
import matplotlib.pyplot as plt
#figure指的是圖形圖表的意思,在這里指的就是我們畫的圖
#當圖片模糊時堪簿,可以傳入dpi(像素)來改變圖片痊乾,讓圖片更清晰,像素越大占的空間也就越大
fig = plt.figure(figsize=(10,8),dpi=80)
#數(shù)據(jù)在x軸的位置椭更,是一個可迭代對象
x = range(2,26,2)
#數(shù)據(jù)在y軸的位置哪审,是一個可迭代對象
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
#-->x軸和y軸的數(shù)據(jù)一起組成了所有要繪制出的坐標
#-->分別是(2,15),(4,13),(6,14.5),(8,17),...
plt.plot(x,y) #傳入x和y,通過plot繪制出折線圖
plt.savefig('./sig_size.jpg') #將生成的圖表保存下來
# plt.bar(x,y) #根據(jù)傳入的x和y虑瀑,通過bar繪制柱狀圖
# plt.xticks(x) #改變x軸的刻度
plt.xticks(x[::2]) #如果覺得刻度太密集协饲,可以用這種方法來改變,因為x和y都是可迭代的對象
plt.show() #在執(zhí)行程序的時候顯示圖形
執(zhí)行結(jié)果會在當前目錄保存一張圖缴川,也會顯示出來
練習(xí)3茉稠、做出10-12點的每一分鐘的氣溫折線圖
#a表示10點到12點每一分鐘的氣溫,繪制折線圖
import matplotlib.pyplot as plt,random
a = [random.randint(20,35) for i in range(120)] #120個氣溫點
b = range(120) #120分鐘(10-12點)
plt.plot(b,a)
plt.show()
結(jié)果:練習(xí)3優(yōu)化把夸、加中文字體方法1
import matplotlib.pyplot as plt
import random
from matplotlib import font_manager
#設(shè)置中文字體而线,在windows中找到自己想用的字體,然后把字體的路徑添加進來,最后在需要的地方通過fontproperties=my_font使用即可
my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/AdobeFangsongStd-Regular.otf')
plt.figure(figsize=(12,8))
x = range(120)
random.seed(10) #設(shè)置隨機種子膀篮,讓不同時候隨機的得到的結(jié)果不一樣
y = [random.uniform(20,35) for i in range(120)]
plt.plot(x,y)
_x_ticks = ['10點{}分'.format(i) for i in x if i < 60]
_x_ticks += ['11點{}分'.format(i-60) for i in x if i > 60]
plt.xticks(x[::5],_x_ticks[::5],rotation=45,fontproperties=my_font) #rotation旋轉(zhuǎn)的角度嘹狞,逆時針旋轉(zhuǎn)
plt.show()
結(jié)果:加中文字體方法2
import matplotlib.pyplot as plt
import random
from matplotlib import font_manager
#設(shè)置字體格式,防止中文亂碼
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False #設(shè)置正常顯示正負號
plt.figure(figsize=(8,6))
x = range(120)
random.seed(10) #設(shè)置隨機種子誓竿,讓不同時候隨機的得到的結(jié)果不一樣
y = [random.uniform(20,35) for i in range(120)]
plt.plot(x,y)
_x_ticks = ['10點{}分'.format(i) for i in x if i < 60]
_x_ticks += ['11點{}分'.format(i-60) for i in x if i > 60]
plt.xticks(x[::5],_x_ticks[::5],rotation=45)
plt.show()
結(jié)果:設(shè)置標題磅网、x軸y軸標簽
import matplotlib.pyplot as plt
import random
from matplotlib import font_manager
#設(shè)置字體格式,防止中文亂碼筷屡,這是全局的涧偷,比在windows找字體設(shè)置要好很多
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
#設(shè)置中文字體,在windows中找到自己想用的字體毙死,然后把字體的路徑添加進來燎潮,最后在需要的地方通過fontproperties=my_font使用即可
# my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/AdobeFangsongStd-Regular.otf')
plt.figure(figsize=(12,8),dpi=80)
x = range(120)
random.seed(10) #設(shè)置隨機種子,讓不同時候隨機的得到的結(jié)果不一樣
y = [random.uniform(20,35) for i in range(120)]
plt.title('10-12點氣溫變化') #設(shè)置標題
plt.xlabel('時間') #設(shè)置x軸標簽
plt.ylabel('溫度℃') #設(shè)置y軸標簽
plt.plot(x,y)
#因為是10-12點扼倘,兩個小時确封,120分鐘,所以需要判斷一下再菊,小于60說明還在10點爪喘,大于60說明到11點了
_x_ticks = ['10點{}分'.format(i) for i in x if i < 60]
_x_ticks += ['11點{}分'.format(i-60) for i in x if i > 60]
plt.xticks(x[::5],_x_ticks[::5],rotation=45) #設(shè)置x軸的刻度
#x[::5]指定x軸的刻度,_x_ticks[::5]設(shè)置x軸每個刻度的名稱纠拔,rotation=45逆時針旋轉(zhuǎn)45度
plt.show()
結(jié)果:練習(xí)4腥放、11-30歲的戀愛次數(shù)折線圖(作為練習(xí)的假設(shè)數(shù)據(jù))
#畫出11-30歲的戀愛情況
import matplotlib.pyplot as plt
import matplotlib
#設(shè)置字體格式,防止中文亂碼绿语,這是全局的秃症,比在windows找字體設(shè)置要好很多
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False #設(shè)置正常顯示正負號
x = range(11,31) #年齡
y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] #對應(yīng)年齡的戀愛次數(shù)
plt.figure(figsize=(8,6))
plt.title('11-30歲戀愛走勢圖')
_x_ticks = ['{}歲'.format(i) for i in x]
plt.xlabel('年齡')
plt.ylabel('戀愛次數(shù)')
plt.plot(x,y,label='A')
plt.legend() #plt.legend()生成默認圖例
plt.xticks(x,_x_ticks,rotation=45)
plt.show()
結(jié)果:多條折線合在一起
小明和小王11歲到30歲分別的戀愛次數(shù)為
y1 =[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1],做出折線圖
import matplotlib.pyplot as plt
import matplotlib
#設(shè)置字體格式吕粹,防止中文亂碼种柑,這是全局的,比在windows找字體設(shè)置要好很多
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False #設(shè)置正常顯示正負號
x = range(11,31)
y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y1 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
# plt.figure(figsize=(20,8))
plt.title('11-30歲戀愛走勢圖')
_x_ticks = ['{}歲'.format(i) for i in x]
plt.xlabel('年齡')
plt.ylabel('戀愛次數(shù)')
#設(shè)置線條的寬度匹耕,顏色
plt.plot(x,y,label='小明',color='red', linewidth=2.5, linestyle="-") #label是設(shè)置圖例聚请,就是圖上的那兩個小的解釋圖的東西
plt.plot(x,y1,label='小王',color='blue' ,linewidth=2.5, linestyle="-")
plt.grid(alpha=0.9) #設(shè)置網(wǎng)格(透明度)
#plt.legend()生成圖例
plt.legend(loc='best') #在legend的參數(shù)中, loc參數(shù)設(shè)置圖例的顯示位置的
'''
'best' : 0, (only implemented for axes legends)(自適應(yīng)方式)
'upper right' : 1,
'upper left' : 2,
'lower left' : 3,
'lower right' : 4,
'right' : 5,
'center left' : 6,
'center right' : 7,
'lower center' : 8,
'upper center' : 9,
'center' : 10,
'''
plt.xticks(x,_x_ticks,rotation=45)
plt.show()
結(jié)果:2稳其、條形圖bar
條形圖和直方圖的區(qū)別:條形圖就是表示一個固定的值驶赏,而直方圖表示的是一個區(qū)域的值
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False #設(shè)置正常顯示正負號
a = ["戰(zhàn)狼2","速度與激情8","功夫瑜伽","西游伏妖篇","變形金剛5:最后的騎士","摔跤吧!爸爸","加勒比海盜5:死無對證","金剛:骷髏島","極限特工:終極回歸","生化危機6:終章","乘風(fēng)破浪","神偷奶爸3","智取威虎山","大鬧天竺","金剛狼3:殊死一戰(zhàn)","蜘蛛俠:英雄歸來","悟空傳","銀河護衛(wèi)隊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]
#設(shè)置圖形大小
plt.figure(figsize=(8,6),dpi=80)
#繪制條形圖
# plt.bar(a,b)
# plt.xticks(rotation=90)
# plt.show()
#直接用上邊的這種方法也行既鞠,但不規(guī)律煤傍,同學(xué)的是規(guī)律的
plt.bar(range(len(a)),b,width=0.5,color='blue')
x = range(len(a))
_x_ticks = a
plt.title('條形圖')
plt.xlabel('電影名稱')
plt.ylabel('票房')
plt.xticks(x,_x_ticks,rotation=90)
plt.show()
結(jié)果:2.1、橫著的條形圖barh
與豎著的區(qū)別就是之前本來的x軸的ticks嘱蛋,變成了y軸的ticks
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
a = ["戰(zhàn)狼2","速度與激情8","功夫瑜伽","西游伏妖篇","變形金剛5:最后的騎士","摔跤吧蚯姆!爸爸","加勒比海盜5:死無對證","金剛:骷髏島","極限特工:終極回歸","生化危機6:終章","乘風(fēng)破浪","神偷奶爸3","智取威虎山","大鬧天竺","金剛狼3:殊死一戰(zhàn)","蜘蛛俠:英雄歸來","悟空傳","銀河護衛(wèi)隊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]
#設(shè)置圖形大小
plt.figure(figsize=(8,6),dpi=80)
#畫橫著的條形圖
plt.barh(range(len(a)),b,height=0.5,color='green')
_y_ticks = a
plt.yticks(range(len(a)),_y_ticks,rotation=45,color='red')
plt.xlabel('票房',color='blue')
plt.ylabel('電影名稱',color='blue')
plt.title('橫著的條形圖',color='blue')
plt.show()
結(jié)果:2.2五续、幾個條形圖在一個圖里顯示
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
plt.figure(figsize=(8,6),dpi=80)
a = ["猩球崛起3:終極之戰(zhàn)","敦刻爾克","蜘蛛俠:英雄歸來","戰(zhàn)狼2"]
#四部電影三天分別的票房
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
"""
下邊的設(shè)置是為了讓三天的票房分別在一起,在設(shè)置寬度的時候就得好好計算一下
因為x軸的值是0-4這個范圍內(nèi)龄恋,其中
0-1是"猩球崛起3:終極之戰(zhàn)",1-2是"敦刻爾克"疙驾,2-3是"蜘蛛俠:英雄歸來",3-4是"戰(zhàn)狼2"
所以需要每一個電影的三個條形圖的寬度加起來分別都是小于1的郭毕,這樣才能直觀的看出來效果它碎,否則會很混亂,或者圖形重疊
x_14=[0,1,2,3,4]
x_15=[0.2,1.2,2.2,3.2,4.2]
x_16=[0.4,2.4,4.4,6.4,8.4]
"""
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(range(len(a)),b_14,width=bar_width,label='9月14日')
plt.bar(x_15,b_15,width=bar_width,label='9月15日')
plt.bar(x_16,b_16,width=bar_width,label='9月16日')
plt.legend(loc='best') #設(shè)置圖例
plt.title('多數(shù)據(jù)條形圖') #設(shè)置圖的標題
plt.xlabel('電影名稱') #設(shè)置x軸的標簽
plt.ylabel('票房') #設(shè)置y軸的標簽
plt.grid(alpha=0.9) #設(shè)置網(wǎng)格
#設(shè)置x軸的刻度
plt.xticks(x_15,a)
plt.show()
結(jié)果:3显押、直方圖hist
直方圖非常像條形圖扳肛,傾向于通過將區(qū)段組合在一起來顯示分布,條形圖是通過一對坐標點來確定表示的,而直方圖是一個區(qū)域的形式來表示的煮落,一個簡單的例子:
import matplotlib.pyplot as plt
population_ages = [22,55,62,45,21,22,34,42,42,4,99,102,110,120,121,122,130,111,115,112,80,75,65,54,44,43,42,48]
bins = [0,10,20,30,40,50,60,70,80,90,100,110,120,130]
plt.hist(population_ages,bins,histtype='bar',rwidth=0.8)
plt.xlabel('x')
plt.ylabel('y')
plt.title('直方圖')
# plt.legend()
plt.show()
結(jié)果:練習(xí)1敞峭、有250部電影的時長數(shù)據(jù)踊谋,用直方圖表示出來
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
plt.figure(figsize=(8,6),dpi=80)
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
print('最大值:',max(a))
print('最小值:',min(a))
print('組距:',d)
print('組數(shù):',bins)
"""
繪制直方圖
data:必選參數(shù)蝉仇,繪圖數(shù)據(jù)
bins:直方圖的長條形數(shù)目,可選項殖蚕,默認為10
normed:是否將得到的直方圖向量歸一化轿衔,可選項,默認為0睦疫,代表不歸一化害驹,顯示頻數(shù)。normed=1蛤育,表示歸一化宛官,顯示頻率。
facecolor:長條形的顏色
edgecolor:長條形邊框的顏色
alpha:透明度
"""
# plt.hist(data, bins=40, normed=0, facecolor="blue", edgecolor="black", alpha=0.7)
lst = plt.hist(a,num_bins,normed='True',alpha=0.5) #normed是指定顯示頻數(shù)或者頻率瓦糕,默認頻數(shù)底洗,True的時候為頻率
# x = lst[1]
# y = lst[0]
#設(shè)置數(shù)字標簽
# for x1,y1 in zip(x,y):
# plt.text(x1+1.5, y1+0.0005, '%.4f' % y1, ha='center', va= 'bottom',fontsize=12,rotation=-90,color='blue')
#設(shè)置x軸的刻度
plt.xticks(range(min(a),max(a)+d,d))
plt.grid() #畫網(wǎng)格
plt.xlabel('區(qū)間')
plt.ylabel('頻率/組距')
plt.title('頻率直方圖')
plt.show()
結(jié)果:4搬俊、散點圖scatter
畫出3月份和10月份的溫度散點圖聪铺,數(shù)據(jù)已知
from matplotlib import pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
y_3 = [11,17,16,11,12,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]
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) #為了讓兩個月份的溫度散點圖區(qū)別開來,所以特意取大了杈湾。而不是直接從32開始算
#設(shè)置圖片的大小
plt.figure(figsize=(8,6),dpi=80)
#使用scatter繪制散點圖圣勒,與折線圖唯一的區(qū)別就是這里
plt.scatter(x_3,y_3,label='3月份')
plt.scatter(x_10,y_10,label='10月份')
#調(diào)整x軸的刻度
_x = list(x_3) + list(x_10)
_xtick_labels = ['3月{}日'.format(i) for i in x_3]
_xtick_labels += ['10月{}日'.format(i-50) for i in x_10]
plt.xlabel('時間')
plt.ylabel('溫度')
plt.title('標題')
plt.xticks(_x[::3],_xtick_labels[::3],rotation=45)
plt.legend(loc='best')
plt.show()
結(jié)果:5费变、餅狀圖
參考自:https://zhuanlan.zhihu.com/p/38160291
繪制餅圖
explode
:設(shè)置各部分突出
labels
:設(shè)置各部分標簽
labeldistance
:設(shè)置各扇形標簽(圖例)與圓心的距離,1.1表示1.1倍半徑
autocpt
:自動添加百分比顯示圣贸,可以采用格式化的方法顯示
shadow
:設(shè)置是否有陰影
startangle
:起始角度挚歧,默認從0開始逆時針轉(zhuǎn)
pctdistance
:設(shè)置百分比標簽與圓心的距離
radius
: 控制餅圖半徑
counterclock
:是否讓餅圖按逆時針順序呈現(xiàn);wedgeprops:設(shè)置餅圖內(nèi)外邊界的屬性吁峻,如邊界線的粗細昼激、顏色等庇绽;textprops:設(shè)置餅圖中文本的屬性,如字體大小橙困、顏色等瞧掺;center:指定餅圖的中心點位置,默認為原點frame:是否要顯示餅圖背后的圖框凡傅,如果設(shè)置為True的話辟狈,需要同時控制圖框x軸、y軸的范圍和餅圖的中心位置夏跷;
返回值
l_text
:圓內(nèi)部文本哼转,matplotlib.text.Text object
p_text
:圓外部文本
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False
labels = ['第一部分','第二部分','第三部分'] #各部分標簽
size = [55,30,15] #各部分大小
color = ['red','green','blue']#各部分顏色
explode = [0.05,0,0] #各部分突出值
plt.pie(size,explode=explode,labels=labels,colors=color,labeldistance=1.1,autopct='%1.1f%%',shadow=False,startangle=90,pctdistance=0.6)
#顏色也可以不設(shè)置,會有默認顏色
plt.axis('equal') #設(shè)置橫軸和縱軸大小相等槽华,這樣餅才是圓的
plt.legend()
plt.show()
結(jié)果:可以去這個網(wǎng)站找自己喜歡的顏色壹蔓,把之前colors里邊的簡稱換成所選顏色的16進制即可http://tool.c7sky.com/webcolor/
或者在下圖中去找自己想要的顏色名稱
各個顏色名稱
圖片來自:https://blog.csdn.net/captain811/article/details/79248912