Python Matplotlib畫圖

主要用于作圖、可視化問題

安裝

pip install matplotlib

導(dǎo)入模塊

# 下面兩種二選一,第二種比較常用
from matplotlib import pylab
# 導(dǎo)入pyplot+numpy
import matplotlib.pyplot as plt
# 僅導(dǎo)入pyplot

導(dǎo)入模塊pyplotpylab,可以參考下面鏈接觀察兩者區(qū)別:
https://www.cnblogs.com/Shoesy/p/6673947.html
(說白了就是pylay=pyplot+numpy)

圖片中文亂碼問題

輸入這三行解決

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認(rèn)字體
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負(fù)號'-'顯示為方塊的問題

常用圖形

折線/散點圖

主要使用plot()來展示杭措,里面前兩個參數(shù)代表x视搏,y坐標(biāo)(注意x,y數(shù)量要一樣)盟广,第三個參數(shù)可以用來設(shè)置散點圖('o')或者顏色、線條形式等各種樣式瓮钥,并且第三個參數(shù)可以同時傳入多個筋量,比如要紅色的散點圖就:'0r'
(1)顏色樣式:

青       c(cyan)
紅       r
品紅     m(magente)
綠       g
藍(lán)       b
黃       y
黑       k
白       w

(2)線條樣式:

-      直線
--     虛線
-.     就是這個樣
:      細(xì)小虛線(就是`...`)

(3)點的樣式:

s      方形
h      六角形(比大寫的細(xì)一點)
H      六角形
*      星形
+      加號
x      x形
d      菱形
D      菱形(和上面的些微不一樣)
p      五邊形

(4)坐標(biāo)區(qū)間:

plt.axis([-10, 10, 0, 2])
#x軸從-10到10,y軸0到2

或者分別設(shè)置x碉熄、y的區(qū)間:

plt.xlim(-10,10)
#設(shè)置x范圍在-10到10
plt.ylim(0,2)
#設(shè)置y范圍在0到2

注:
設(shè)置點的樣式時默認(rèn)就是散點圖桨武,以及同類樣式只能設(shè)置一個(比如不能設(shè)置兩種顏色),并且還可以把多個圖集合在一起展示锈津,那就多plot幾個呀酸,plot就相當(dāng)于一個畫布,每plot一個就相當(dāng)于在上面畫一張圖琼梆,再弄就繼續(xù)在上面畫

實際舉例
x = [1,3,5,2,4]
y = [2,4,5,1,3]
plt.plot(x, y)  #將x性誉,y軸坐標(biāo)數(shù)據(jù)傳入,第三個參數(shù)是展現(xiàn)形式茎杂,默認(rèn)是折線圖
plt.plot(x, y, 'ok')    #黑色散點圖
plt.xlim(0,10)  #設(shè)置x范圍在0到10
plt.ylim(0,10)  #設(shè)置y范圍在0到10
plt.title("show")   #設(shè)置標(biāo)題名错览,在中上方
plt.xlabel("num")   #設(shè)置x軸名稱,在中下方
plt.ylabel("age")   #設(shè)置y軸名稱煌往,在中左方
plt.show()      #可視化顯示數(shù)據(jù)倾哺,注意show了之后畫布就被清空了,前面的內(nèi)容下次就show不出來了
直方圖

主要用hist()來顯示刽脖,實現(xiàn)方式很簡單羞海,把一組數(shù)據(jù)放入括號里就行了,例如隨機(jī)生成一堆正態(tài)分布的數(shù)曲管,然后直方圖顯示:

data = numpy.random.normal(0, 1, 10000000)  #隨機(jī)生成這么多個符合正態(tài)分布的數(shù)
style = numpy.arange(-3, 3, 0.01)
#從-3到3按0.01為間隔的格式却邓,如果不設(shè)格式,弄出來一點都不像
plt.hist(data, style)
plt.show()

其中如果要設(shè)置直方圖格式(寬度翘地、上下限申尤、是否要輪廓)可以這樣:

x = numpy.random.random_integers(0, 100, 100)   #隨機(jī)生成100個上下限為0到100的數(shù)
style = numpy.arange(1, 100, 2)  #在1到100內(nèi)癌幕,階值為2
plt.hist(x, style, histtype='stepfilled')
#生成相應(yīng)樣式直方圖,前面的樣式可以看作范圍是1到100里
#直方圖的每條柱子寬度為2的意思
#第三個參數(shù)是不要輪廓的意思昧穿,默認(rèn)是有
plt.show()
#實際上你會發(fā)現(xiàn)只有1到99的數(shù)據(jù)勺远,因為99+2>100,而100要和101的數(shù)據(jù)在一起才能顯示
#所以除非有101时鸵,才能顯示100-101的數(shù)據(jù)

注:
直方圖和折線圖這些不太一樣胶逢,折線圖是傳入兩個等長數(shù)據(jù),然后每個x饰潜、y坐標(biāo)一一對應(yīng)展示出來初坠。而直方圖是:第一個參數(shù)代表你傳入的所有數(shù)據(jù),第二個參數(shù)代表你傳入的x軸范圍彭雾,然后直方圖會將第一個參數(shù)里傳入的數(shù)據(jù)一個個計算在某個范圍內(nèi)含有的數(shù)據(jù)量碟刺,因此傳入的兩個參數(shù)數(shù)據(jù)不一定要等長,例如下面的例子:

x = [1,2,2.5,3,4,5]
# 傳入一堆數(shù)據(jù)(6個)
y = [1,2,3,4,5]
# 傳入范圍為1-5薯酝,其中:
# 1-2有1個(1)
# 2-3有2個(2半沽、2.5)
# 3-4有1個
# 4-5有2個
plt.hist(x, y)
plt.show()  

結(jié)果如圖:


直方圖結(jié)果

可以看出數(shù)據(jù)被自動分配到對應(yīng)的范圍內(nèi)上了

子圖

使用subplot(row, col, area):三個參數(shù)分別是行數(shù)、列數(shù)和區(qū)域吴菠,比如要將原圖分成2行2列(切成4份)者填,然后要左下角那個圖就:

plt.figure(figsize=(10, 50))
# figure設(shè)置子圖排列尺寸,間距10做葵,尺寸為50*50
plt.subplot(2, 2, 3)
plt.show()

如果想4個圖都顯示就4個subplot占哟,分別1、2酿矢、3榨乎、4就行了,然后在各圖的subplot之后寫的都是每個圖的內(nèi)容瘫筐,現(xiàn)在我們試試弄一個2行谬哀,第一行兩列的圖片(想象下鼠標(biāo)的樣子),而且分別是不同的內(nèi)容:

plt.subplot(2,2,1)      #2行兩列的第一個圖严肪,內(nèi)容為1到100遞增為5的直方圖
x = numpy.arange(1,100,5)
plt.hist(x)
plt.subplot(2,2,2)      #兩行兩列的第二個圖,內(nèi)容為100個符合正態(tài)分布數(shù)的直方圖
y = numpy.random.normal(0,1,100)
plt.hist(y)
plt.subplot(2,1,2)      #兩行一列的第二個圖谦屑,此時會把上面兩個圖合起來看出兩行一列的第一個圖驳糯,而當(dāng)前圖看成第二個圖,內(nèi)容為一個折線圖
z = [[1,2,3,4,5],[1,5,3,2,4]]
plt.plot(z[0],z[1],'k')
plt.show()              #展示這三個圖
餅狀圖
示例
from matplotlib import pyplot as plt 
#調(diào)節(jié)圖形大小氢橙,寬酝枢,高
plt.figure(figsize=(6,9))
#定義餅狀圖的標(biāo)簽,標(biāo)簽是列表
labels = [u'第一部分',u'第二部分',u'第三部分']
#每個標(biāo)簽占多大悍手,會自動去算百分比
sizes = [60,30,10]
colors = ['red','yellowgreen','lightskyblue']
#將某部分出來帘睦,使用括號袍患,將第一塊分割出來,數(shù)值的大小是分割出來的與其他兩塊的間隙
explode = (0.05,0,0)

patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors, \
labeldistance = 1.1,autopct = '%3.1f%%',shadow = False, startangle = 90,pctdistance = 0.6)
#labeldistance竣付,文本的位置離遠(yuǎn)點有多遠(yuǎn)诡延,1.1指1.1倍半徑的位置
#autopct,圓里面的文本格式古胆,%3.1f%%表示小數(shù)有三位肆良,整數(shù)有一位的浮點數(shù)
#shadow,餅是否有陰影
#startangle逸绎,起始角度惹恃,0,表示從0開始逆時針轉(zhuǎn)棺牧,為第一塊巫糙。一般選擇從90度開始比較好看
#pctdistance,百分比的text離圓心的距離
#patches, l_texts, p_texts颊乘,為了得到餅圖的返回值参淹,p_texts餅圖內(nèi)部文本的,l_texts餅圖外label的文本
#改變文本的大小
#方法是把每一個text遍歷疲牵。調(diào)用set_size方法設(shè)置它的屬性
for t in l_text:
    t.set_size=(30)
for t in p_text:
    t.set_size=(20)
# 設(shè)置x承二,y軸刻度一致,這樣餅圖才能是圓的
plt.axis('equal')
plt.legend()
plt.show()

注:
labels纲爸、sizes亥鸠、colorsexplode的長度都要一樣

3D圖

1.導(dǎo)入3D圖相關(guān)模塊:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

2.將畫圖板加到3D模塊里,然后加入數(shù)據(jù)即可:

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x, y, z)
plt.show()

3D散點圖舉例:

from random import randint
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

li_xyz = [(randint(0, 100), randint(0, 100), randint(0, 100)) for i in range(100)]
x, y, z = zip(*li_xyz)

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x, y, z)
plt.show()

讀取圖片

通過imread()讀取识啦,舉例:

from matplotlib.image import imread
file = r'2.jpg'
img = imread(file)
plt.imshow(img)
plt.show()
更多參考

https://blog.csdn.net/qq_34859482/article/details/80617391

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末负蚊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子颓哮,更是在濱河造成了極大的恐慌家妆,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冕茅,死亡現(xiàn)場離奇詭異伤极,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)姨伤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門哨坪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乍楚,你說我怎么就攤上這事当编。” “怎么了徒溪?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵忿偷,是天一觀的道長金顿。 經(jīng)常有香客問我,道長鲤桥,這世上最難降的妖魔是什么揍拆? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮芜壁,結(jié)果婚禮上礁凡,老公的妹妹穿的比我還像新娘。我一直安慰自己慧妄,他們只是感情好顷牌,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著塞淹,像睡著了一般窟蓝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饱普,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天运挫,我揣著相機(jī)與錄音,去河邊找鬼套耕。 笑死谁帕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冯袍。 我是一名探鬼主播匈挖,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼康愤!你這毒婦竟也來了儡循?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤征冷,失蹤者是張志新(化名)和其女友劉穎择膝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體检激,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肴捉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叔收。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片每庆。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖今穿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伦籍,我是刑警寧澤蓝晒,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布腮出,位于F島的核電站,受9級特大地震影響芝薇,放射性物質(zhì)發(fā)生泄漏胚嘲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一洛二、第九天 我趴在偏房一處隱蔽的房頂上張望馋劈。 院中可真熱鬧,春花似錦晾嘶、人聲如沸妓雾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽械姻。三九已至,卻和暖如春机断,著一層夾襖步出監(jiān)牢的瞬間楷拳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工吏奸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留欢揖,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓奋蔚,卻偏偏與公主長得像她混,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旺拉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

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