matplotlib基礎(chǔ)

利用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è)置一次

在windows上找字體的所在路徑方法:打開控制面板→外觀和個性化→字體這樣就能找到了,然后選擇自己想用的字體尸红,拷貝出它的所在路徑(絕對路徑)吱涉,例如我選擇了仿宋這個字體

我需要做的就是右擊→屬性

然后拷貝出他的路徑,包括名字外里。
做如下設(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é)果會在當前目錄保存一張圖缴川,也會顯示出來

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猫态,隨后出現(xiàn)的幾起案子佣蓉,更是在濱河造成了極大的恐慌,老刑警劉巖亲雪,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勇凭,死亡現(xiàn)場離奇詭異,居然都是意外死亡义辕,警方通過查閱死者的電腦和手機虾标,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灌砖,“玉大人璧函,你說我怎么就攤上這事』裕” “怎么了蘸吓?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長续镇。 經(jīng)常有香客問我美澳,道長,這世上最難降的妖魔是什么摸航? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任制跟,我火速辦了婚禮,結(jié)果婚禮上酱虎,老公的妹妹穿的比我還像新娘雨膨。我一直安慰自己,他們只是感情好读串,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布聊记。 她就那樣靜靜地躺著撒妈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪排监。 梳的紋絲不亂的頭發(fā)上狰右,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音舆床,去河邊找鬼棋蚌。 笑死,一個胖子當著我的面吹牛挨队,可吹牛的內(nèi)容都是我干的谷暮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼盛垦,長吁一口氣:“原來是場噩夢啊……” “哼湿弦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腾夯,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤颊埃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俯在,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竟秫,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡娃惯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年跷乐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趾浅。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡愕提,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出皿哨,到底是詐尸還是另有隱情浅侨,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布证膨,位于F島的核電站如输,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏央勒。R本人自食惡果不足惜不见,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崔步。 院中可真熱鬧稳吮,春花似錦、人聲如沸井濒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酪惭,卻和暖如春希痴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背春感。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工润梯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甥厦。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓纺铭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刀疙。 傳聞我的和親對象是個殘疾皇子舶赔,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 以前,每年到夏天露肉的季節(jié)谦秧,就會開始叫嚷著健身竟纳。并定下遠大的目標:練出馬甲線,小蠻腰疚鲤,蜜桃臀锥累。花三分鐘定好宏偉的目...
    Jane6666閱讀 1,852評論 8 11
  • C太太確實是一個浪漫的人集歇,偶爾寫些東西桶略,雖說幾乎不定期更新但是還是很有意思的。有一次诲宇,寫了一個精神勵志體的小說际歼,大...
    Caphintty圖圖閱讀 260評論 0 1
  • 棄逐征塵踏歸途,迎逢細問通有無姑蓝。 杯酒洗盡心酸事鹅心,花影滿身誤相拂
    陽春閱讀 199評論 6 8