十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
python matplotlib模塊,是擴(kuò)展的MATLAB的一個(gè)繪圖工具庫。他可以繪制各種圖形,可是最近最的一個(gè)小程序,得到一些三維的數(shù)據(jù)點(diǎn)圖,就學(xué)習(xí)了下python中的matplotlib模塊,如何繪制三維圖形。
創(chuàng)新互聯(lián)專注于鎮(zhèn)平企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開發(fā)。鎮(zhèn)平網(wǎng)站建設(shè)公司,為鎮(zhèn)平等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
初學(xué)者,可能對這些第三方庫安裝有一定的小問題,對于一些安裝第三方庫經(jīng)驗(yàn)較少的朋友,建議使用 Anaconda ,集成了很多第三庫,基本滿足大家的需求,下載地址,對應(yīng)選擇python 2.7 或是 3.5 的就可以了(PS:后面的demo是python2.7):
首先提醒注意,以下兩個(gè)函數(shù)的區(qū)別:
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow') #繪面1
和
ax.scatter(x[1000:4000],y[1000:4000],z[1000:4000],c='r') #繪點(diǎn)1
1、繪制3D曲面圖
# -*- coding: utf-8 -*-"""
Created on Thu Sep 24 16:17:13 2015
@author: Eddy_zheng
"""from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)# 具體函數(shù)方法可用 help(function) 查看,如:help(ax.plot_surface)ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
plt.show()1234567891011121314151617181920212223
效果展示:
2、繪制三維的散點(diǎn)圖(通常用于表述一些數(shù)據(jù)點(diǎn)分布)
4a.mat 數(shù)據(jù)地址,找到4a.mat 下載即可:
# -*- coding: utf-8 -*-"""
Created on Thu Sep 24 16:37:21 2015
@author: Eddy_zheng
"""import scipy.io as sio ?
from mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as plt
mat1 = '4a.mat' #這是存放數(shù)據(jù)點(diǎn)的文件,需要它才可以畫出來。上面有下載地址data = sio.loadmat(mat1)
m = data['data']
x,y,z = m[0],m[1],m[2]
ax=plt.subplot(111,projection='3d') #創(chuàng)建一個(gè)三維的繪圖工程#將數(shù)據(jù)點(diǎn)分成三部分畫,在顏色上有區(qū)分度ax.scatter(x[:1000],y[:1000],z[:1000],c='y') #繪制數(shù)據(jù)點(diǎn)ax.scatter(x[1000:4000],y[1000:4000],z[1000:4000],c='r')
ax.scatter(x[4000:],y[4000:],z[4000:],c='g')
ax.set_zlabel('Z') #坐標(biāo)軸ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()123456789101112131415161718192021222324252627
效果:
上面就是學(xué)習(xí)區(qū)分了下兩個(gè)函數(shù),當(dāng)時(shí)還被小困惑了下,希望對大家有所幫助。其實(shí)里面還有好多參數(shù)設(shè)置,比如說改變顏色,包括繪制點(diǎn)圖的點(diǎn)的形狀等都是可以改變的,有需要的大家可以自己看看這個(gè)函數(shù),學(xué)習(xí)下(help(對應(yīng)的function))。
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。Eddy_zheng
接受自己的普通,然后全力以赴的出眾,告訴自己要努力,但不要著急....
當(dāng)然, 這個(gè)結(jié)果并不是我真正想要的,Pass, 太丑了!
好吧,安排,我們先看下實(shí)現(xiàn)后的效果!
這個(gè)效果自然就比之前的好多了!
實(shí)現(xiàn)python散點(diǎn)圖繪制需要用到matplotlib庫, matplotlib庫是專門用于可視化繪圖的工具庫;學(xué)習(xí)一個(gè)新的庫當(dāng)然看官方文檔了:
實(shí)現(xiàn)思路:
matplotlib.pyplot.scatter() 函數(shù)是專門繪制散點(diǎn)圖的函數(shù):
matplotlib.pyplot.scatter ( x, y , s=None , c=None , marker=None , cmap=None , norm=None , vmin=None , vmax=None , alpha=None , linewidths=None , verts=None , edgecolors=None , ***, data=None , ** kwargs ) **
plt.scatter(observation, estimate, c=Z1, cmap=colormap, marker=".", s=marker_size, norm=colors.LogNorm(vmin=Z1.min(), vmax=0.5 * Z1.max()))
其中:
1、c參數(shù)為計(jì)算的散點(diǎn)密度;
2、cmap為色帶(matplotlib里面自帶了很多色帶可供選擇),參見:
3、由于計(jì)算的散點(diǎn)密度數(shù)值大小分散,因此利用norm參數(shù)對散點(diǎn)密度Z1進(jìn)行歸一化處理(歸一化方式很多,參見colors類),并給歸一化方式設(shè)置色帶刻度的最大最小值vmin和vmax(一般這兩個(gè)參數(shù)就是指定散點(diǎn)密度的最小值和最大值),這樣就建立起了密度與色帶的映射關(guān)系。
(這里的結(jié)果與前面展示的相比改變了計(jì)算散點(diǎn)密度的半徑:radius = 3以及繪制散點(diǎn)圖的散點(diǎn)大小marksize)
作者能力水平有限,歡迎各位批評指正!
1,xlable,ylable設(shè)置x,y軸的標(biāo)題文字。
2,title設(shè)置標(biāo)題。
3,xlim,ylim設(shè)置x,y軸顯示范圍。
plt.show()顯示繪圖窗口,通常情況下,show()會(huì)阻礙程序運(yùn)行,帶-wthread等參數(shù)的環(huán)境下,窗口不會(huì)關(guān)閉。
plt.saveFig()保存圖像。
面向?qū)ο罄L圖
1,當(dāng)前圖表和子圖可以用gcf(),gca()獲得。
subplot()繪制包含多個(gè)圖表的子圖。
configure subplots,可調(diào)節(jié)子圖與圖表邊框距離。
可以通過修改配置文件更改對象屬性。
圖標(biāo)顯示中文
1,在程序中直接指定字體。
2, 在程序開始修改配置字典reParams.
3,修改配置文件。
Artist對象
1,圖標(biāo)的繪制領(lǐng)域。
2,如何在FigureCanvas對象上繪圖。
3,如何使用Renderer在FigureCanvas對象上繪圖。
FigureCanvas和Render處理底層圖像操作,Artist處理高層結(jié)構(gòu)。
分為簡單對象和容器對象,簡單的Aritist是標(biāo)準(zhǔn)的繪圖元件,例如Line 2D,Rectangle,Text,AxesImage等,而容器類型包含許多簡單的的 Aritist對象,使他們構(gòu)成一個(gè)整體,例如Axis,Axes,Figure等。
直接創(chuàng)建Artist對象進(jìn)項(xiàng)繪圖操作步奏:
1,創(chuàng)建Figure對象(通過figure()函數(shù),會(huì)進(jìn)行許多初始化操作,不建議直接創(chuàng)建。)
2,為Figure對象創(chuàng)建一個(gè)或多個(gè)Axes對象。
3,調(diào)用Axes對象的方法創(chuàng)建各類簡單的Artist對象。
Figure容器
如何找到指定的Artist對象。
1,可調(diào)用add_subplot()和add_axes()方法向圖表添加子圖。
2,可使用for循環(huán)添加?xùn)鸥瘛?/p>
3,可通過transform修改坐標(biāo)原點(diǎn)。
Axes容器
1,patch修改背景。
2,包含坐標(biāo)軸,坐標(biāo)網(wǎng)格,刻度標(biāo)簽,坐標(biāo)軸標(biāo)題等內(nèi)容。
3,get_ticklabels(),,get-ticklines獲得刻度標(biāo)簽和刻度線。
1,可對曲線進(jìn)行插值。
2,fill_between()繪制交點(diǎn)。
3,坐標(biāo)變換。
4,繪制陰影。
5,添加注釋。
1,繪制直方圖的函數(shù)是
2,箱線圖(Boxplot)也稱箱須圖(Box-whisker Plot),是利用數(shù)據(jù)中的五個(gè)統(tǒng)計(jì)量:最小值、第一四分位
數(shù)、中位數(shù)、第三四分位數(shù)與最大值來描述數(shù)據(jù)的一種方法,它可以粗略地看出數(shù)據(jù)是否具有對稱性以及分
布的分散程度等信息,特別可以用于對幾個(gè)樣本的比較。
3,餅圖就是把一個(gè)圓盤按所需表達(dá)變量的觀察數(shù)劃分為若干份,每一份的角度(即面積)等價(jià)于每個(gè)觀察
值的大小。
4,散點(diǎn)圖
5,QQ圖
低層繪圖函數(shù)
類似于barplot(),dotchart()和plot()這樣的函數(shù)采用低層的繪圖函數(shù)來畫線和點(diǎn),來表達(dá)它們在頁面上放置的位置以及其他各種特征。
在這一節(jié)中,我們會(huì)描述一些低層的繪圖函數(shù),用戶也可以調(diào)用這些函數(shù)用于繪圖。首先我們先講一下R怎么描述一個(gè)頁面;然后我們講怎么在頁面上添加點(diǎn),線和文字;最后講一下怎么修改一些基本的圖形。
繪圖區(qū)域與邊界
R在繪圖時(shí),將顯示區(qū)域劃分為幾個(gè)部分。繪制區(qū)域顯示了根據(jù)數(shù)據(jù)描繪出來的圖像,在此區(qū)域內(nèi)R根據(jù)數(shù)據(jù)選擇一個(gè)坐標(biāo)系,通過顯示出來的坐標(biāo)軸可以看到R使用的坐標(biāo)系。在繪制區(qū)域之外是邊沿區(qū),從底部開始按順時(shí)針方向分別用數(shù)字1到4表示。文字和標(biāo)簽通常顯示在邊沿區(qū)域內(nèi),按照從內(nèi)到外的行數(shù)先后顯示。
添加對象
在繪制的圖像上還可以繼續(xù)添加若干對象,下面是幾個(gè)有用的函數(shù),以及對其功能的說明。
?points(x, y, ...),添加點(diǎn)
?lines(x, y, ...),添加線段
?text(x, y, labels, ...),添加文字
?abline(a, b, ...),添加直線y=a+bx
?abline(h=y, ...),添加水平線
?abline(v=x, ...),添加垂直線
?polygon(x, y, ...),添加一個(gè)閉合的多邊形
?segments(x0, y0, x1, y1, ...),畫線段
?arrows(x0, y0, x1, y1, ...),畫箭頭
?symbols(x, y, ...),添加各種符號
?legend(x, y, legend, ...),添加圖列說明