欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python可視化繪制圖表的教程詳解

 更新時間:2022年10月10日 09:22:13   作者:肚肚杜杜  
python?有許多可視化工具,但本文主要為大家介紹一下Matplotlib。Matplotlib是一種2D的繪圖庫,它可以支持硬拷貝和跨系統(tǒng)的交互,感興趣的可以了解一下

python 有許多可視化工具,但本書只介紹Matplotlib。Matplotlib是一種2D的繪圖庫,它可以支持硬拷貝和跨系統(tǒng)的交互,它可以在python腳本,IPython的交互環(huán)境下、Web應(yīng)用程序中使用。該項目是由John Hunter 于2002年啟動,其目的是為python構(gòu)建MATLAB式的繪圖接口。如果結(jié)合使用一種GUI工具包(如IPython),Matplotlib還具有諸如縮放和平移等交互功能。它不僅支持各種操作系統(tǒng)上許多不同的GUI后端,而且還能將圖片導(dǎo)出為各種常見的矢量(vector)和光柵(raster)圖:PDF、SVG、JPG、PNG、BMP、GIF等。

1.Matplotlib 程序包

所謂“一圖勝千言”,我們很多時候需要通過可視化的方式查看、分析數(shù)據(jù),雖然pandas中也有一些繪圖操作,但是相比較而言,Matplotlib在繪圖顯示效果方面更加絢麗。Pyplot為Matplotlib提供了一個方便的接口,我們可以通過pyplot對matplotlib進(jìn)行操作,多數(shù)情況下pyplot的命令與MATLAB有些相似。

導(dǎo)入Matplotlib包進(jìn)行簡單的操作(此處需要安裝pip install matplotlib):

import matplotlib.pyplot as plt
#首先定義兩個函數(shù)(正弦&余弦)
import numpy as np
X = np.linspace(-np.pi,np.pi,256,endpoint=True)  #-Π to +Π的256個值
C,S = np.cos(X),np.sin(X)
plt.plot(X,C)
plt.plot(X,S)
#在ipython 的交互環(huán)境中需要這句才能顯示出來
plt.show()

2.繪圖命令的基本架構(gòu)及其屬性設(shè)置

上面的例子我們可以看出,幾乎所有的屬性和繪圖的框架我們都選用默認(rèn)設(shè)置?,F(xiàn)在我們來看Pyplot 繪圖的基本框架是什么,用過photoshop的人都知道,作圖時先要定義一個畫布,此處的畫布就是Figure,然后把其他素材“畫”到該Figure上。

(1)在Figure 上創(chuàng)建子plot,并設(shè)置屬性,

具體簡析和代碼如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,1000)  #X軸數(shù)據(jù)
y1 = np.sin(x)   #Y軸數(shù)據(jù)
y2 = np.cos(x**2)  #Y軸數(shù)據(jù)
plt.figure(figsize=(8,4))

plt.plot(x,y1,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,y2,"b--",label="$cos(x^2)$")
#指定曲線的顏色和線形,如“b--”表示藍(lán)色虛線(b:藍(lán)色,-:虛線)
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")

#書上寫的是:plt.figure(figsize(8,4))
#注意:會報錯  name 'figsize' is not defined
#這里figsize是一個參數(shù),并不是一個函數(shù),給參數(shù)賦值中間需要加一個等號,寫為:plt.figure(figsize=(8,4))

#使用關(guān)鍵字參數(shù)可以指定所繪制的曲線的各種屬性:
#label:給曲線指定一個標(biāo)簽名稱,此標(biāo)簽將在圖示中顯示。如果標(biāo)簽字符串的前后有字符“$”,則Matplotlib 會使用其內(nèi)嵌的LaTex引擎將其顯示為數(shù)學(xué)公式
#color:指定曲線的顏色。顏色可以用如下方法表示
#英文單詞
#以“#”字符開頭的3個16進(jìn)制數(shù),如“#ff0000”表示紅色。以0~1的RGB表示,如(1.0,0.0,0.0)也表示紅色
#linewidth:指定曲線的寬度,可以不是整數(shù),也可以使用縮寫形式的參數(shù)名lw
plt.ylim(-1.5,1.5)
plt.legend()
plt.show()

(2)在Figure上創(chuàng)建多個子plot

如果需要同時繪制多幅圖表的話,可以給Figure傳遞一個整數(shù)參數(shù)指定圖表的序號,如果所指定序號的繪圖對象已經(jīng)存在的話,將不創(chuàng)建新的對象,而只是讓它成為當(dāng)前繪圖對象,具體分析和代碼如下:

import numpy as np
import matplotlib.pyplot as plt
fig1 =plt.figure(2)
plt.subplot(211)
#subplot(211)把繪圖區(qū)域等分為2行*1列共兩個區(qū)域
#然后在區(qū)域1(上區(qū)域)中創(chuàng)建一個軸對象
plt.subplot(212)#在區(qū)域2(下區(qū)域)創(chuàng)建一個軸對象
plt.show()

#我們還可通過命令再次拆分這些塊(相當(dāng)于Word中拆分單元格的操作)

f1 = plt.figure(5)
plt.subplot(221)
plt.subplot(222)
plt.subplot(212)
plt.subplots_adjust(left = 0.08,right = 0.95,wspace = 0.25,hspace = 0.45)
#subplots_adjust的操作是類似網(wǎng)頁csv格式化中的邊距處理,左邊距離多少?
#右邊邊距多少?這個取決于你需要繪制的大小和各個模塊之間的間距。
plt.show()

(3)通過Axes設(shè)置當(dāng)前對象plot的屬性

以上我們操作的是在Figure上繪制圖案,但是當(dāng)我們繪制的圖案過多,又需要選取不同的小模塊進(jìn)行格式化設(shè)置時,Axes對象就能很好的解決這個問題。具體簡析和代碼如下:

import numpy as np
import matplotlib.pyplot as plt
fig,axes = plt.subplots(nrows=2,ncols=2)  #定一個2*2的plot
plt.show()

#現(xiàn)在我們需要通過命令來操作每個plot(subplot),設(shè)置他們的title并刪除橫縱坐標(biāo)值
fig,axes =plt.subplots(nrows=2,ncols=2)
axes[0,0].set(title="Upper Left")
axes[0,1].set(title="Upper Right")
axes[1,0].set(title="Lower Left")
axes[1,1].set(title="Lower Right")

另外,實際來說,plot操作的底層操作就是Axes對象的操作,只不過如果我們不使用Axes而用plot操作時,它默認(rèn)的是plot.subplot(111),也就是說plot其實是Axes的特例

(4)保存Figure對象

最后一項操作就是保存,我們繪制的目的是用在其他研究中,或者希望可以把研究結(jié)果保存下來,此時需要的操作是save。具體簡析和代碼如下:

import numpy as np
import matplotlib.pyplot as plt
plt.savefig("save_test.png",dpi=520)  #默認(rèn)像素是dpi是80
#此處只是用了savefig屬性對Figure進(jìn)行保存

另外,除了上述的基本操作之外,Matplotlib還有其他的繪圖優(yōu)勢,此處只是簡單介紹了它在繪圖時需要注意的事項。

3.Seaborn 模塊介紹

前面我們簡單介紹了Matplotlib庫的繪圖功能和屬性設(shè)置,對于常規(guī)性的繪圖,使用pandas的API屬性研究較為透徹,幾乎沒有不能解決的問題。但是有的時候Matplotlib還是有它的不足之處,Matplotlib 自動化程度非常高,但是,掌握如何設(shè)置系統(tǒng)以便獲得一個吸引人的圖是相當(dāng)困難的事。為了控制Matplotlib圖表的外觀,Seaborn 模塊自帶許多定制的主題和高級的接口。

3.1 未加Seaborn 模塊的效果

具體簡析和代碼如下:

#有關(guān)于seaborn介紹
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
np.random.seed(sum(map(ord,"aesthetics")))
#首先定義一個函數(shù)用來畫正弦函數(shù),可幫助了解可以控制的不同風(fēng)格參數(shù)
def sinplot(flip=1):
    x=np.linspace(0,14,100)
    for i in range(1,7):
        plt.plot(x,np.sin(x+i*.5)*(7-i)*flip)
        sinplot()
    plt.show()

#有關(guān)于seaborn介紹
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
np.random.seed(sum(map(ord,"aesthetics")))
def sinplot(flip=1):
    x = np.linspace(0,14,100)
    for i in range(1,7):
        plt.plot(x,np.sin(x + i * .5) * (7-i) * flip)
        #轉(zhuǎn)換成Seaborn 模塊,只需要引入seaborn模塊
import seaborn as sns  #不同之處在此
sinplot()
plt.show()

使用seaborn的優(yōu)點有:1.seaborn默認(rèn)淺灰色背景與白色網(wǎng)格線的靈感來源于Matplotlib,卻比matplotlib的顏色更加柔和;2.seaborn把繪圖風(fēng)格參數(shù)與數(shù)據(jù)參數(shù)分開設(shè)置。seaborn有兩組函數(shù)對風(fēng)格進(jìn)行控制:axes_style()/set_style()函數(shù)和plotting_context()/set_context()函數(shù)。axes_style()函數(shù)和plotting_context()函數(shù)返回參數(shù)字典,set_style()函數(shù)和set_context()函數(shù)設(shè)置Matplotlib。

(1)使用set_style()函數(shù)

具體通過cording查看效果:

import seaborn as sns
sns.set_style("ticks")
sns.set_style("whitegrid")
sinplot()
plt.show()
#seaborn 有5種預(yù)定義的主題:
#darkgrid (灰色背景+白網(wǎng)格)
#whitegrid(白色背景+黑網(wǎng)格)
#dark (僅灰色背景)
#white (僅白色背景)
#ticks (坐標(biāo)軸帶刻度)
#默認(rèn)的主題是darkgrid,修改主題可以使用set_style()函數(shù)

(2)使用set_context()函數(shù)

具體通過coding查看效果:

import seaborn as sns
sns.set_context("paper")
sinplot()
plt.show()
#上下文(context)可以設(shè)置輸出圖片的大小尺寸(scale)  
#seaborn中預(yù)定義的上下文有4種:paper、notebook、talk和poster。 默認(rèn)使用notebook上下文

(3)使用Seaborn“耍酷”

然而seaborn 不僅能夠用來更改背景顏色,或者改變畫布大小,還有其他很多方面的用途,比如下面這個例子:

import seaborn as sns
sns.set()
#通過加載sns自帶數(shù)據(jù)庫中的數(shù)據(jù)(具體數(shù)據(jù)可以不關(guān)心)
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month","year","passengers")

#使用每個單元格中的數(shù)據(jù)值繪制一個熱圖heatmap
sns.heatmap(flights,annot=True,fmt="d",linewidths=.5)
plt.show()

4.描述性統(tǒng)計圖形概覽

描述性統(tǒng)計是借助圖表或者總結(jié)性的數(shù)值來描述數(shù)據(jù)的統(tǒng)計手段。數(shù)據(jù)挖掘工作的數(shù)據(jù)分析階段,我們可借助描述性統(tǒng)計來描述或總結(jié)數(shù)據(jù)的基本情況,一來可以梳理自己的思維,二來可以更好地向他人展示數(shù)據(jù)分析結(jié)果。數(shù)值分析的過程中,我們往往要計算出數(shù)據(jù)的統(tǒng)計特征,用來做科學(xué)計算的Numpy和SciPy工具可以滿足我們的需求。Matplotlib工具可用來繪制圖,滿足圖分析的需求。

4.1制作數(shù)據(jù)

數(shù)據(jù)是自己制作的,主要包括個人身高、體重及一年的借閱圖書量(之所以自己制作數(shù)據(jù)是因為不是每份真實的數(shù)據(jù)都可以進(jìn)行接下來的分析,比如有些數(shù)據(jù)就不能繪制餅圖,另一個角度也說明,此處舉例的數(shù)據(jù)其實沒有實際意義,只是為了分析而舉例,但是不代表在具體的應(yīng)用中這些分析不能發(fā)揮作用)。
另外,以下的數(shù)據(jù)顯示都是在Seaborn庫的作用下體現(xiàn)的效果。

#案例分析(結(jié)合圖書情報學(xué),比如借書量)
from numpy import array
from numpy.random import normal
def getData():
    heights = []
    weights = []
    books = []
    N =10000
    for i in range(N):
        while True:
            #身高服從均值為172,標(biāo)準(zhǔn)差為6的正態(tài)分布
            height = normal(172,6)
            if 0<height:break
        while True:
            #體重由身高作為自變量的線性回歸模型產(chǎn)生,誤差服從標(biāo)準(zhǔn)正態(tài)分布
            weight = (height-80)*0.7 + normal(0,1)
            if 0 < weight:break
        while True:
            #借閱量服從均值為20,標(biāo)準(zhǔn)差為5的正態(tài)分布
            number = normal(20,5)
            if 0<= number and number<=50:
                book = "E"if number <10 else("D"if number<15 else ("C"if number<20 else("B"if number<25 else "A")))
            break
        heights.append(height)
        weights.append(weight)
        books.append(book)
        return array(heights),array(weights),array(books)
    heights,weights,books =getData()

4.2 頻數(shù)分析

(1)定性分析

柱狀圖和餅形圖是對定性數(shù)據(jù)進(jìn)行頻數(shù)分析的常用工具,使用前需將每一類的頻數(shù)計算出來。

①柱狀圖。柱狀圖是以柱的高度來指代某種類型的頻數(shù),使用Matplotlib對圖書借閱量這一定性變量繪制柱狀圖的代碼如下:

from matplotlib import pyplot
#繪制柱狀圖
def drawBar(books):
    xticks=["A","B","C","D","E"]
    bookGroup ={ }
    #對每一類借閱量進(jìn)行頻數(shù)統(tǒng)計
    for book in books:
        bookGroup[book] = bookGroup.get(book,0) + 1
    #創(chuàng)建柱狀圖
    #第一個參數(shù)為柱的橫坐標(biāo)
    #第二個參數(shù)為柱的高度
    #參數(shù)align為柱的對齊方式,以第一個參數(shù)為參考標(biāo)準(zhǔn)
    pyplot.bar(range(5),[bookGroup.get(xtick,0) for xtick in xticks],align="center")
    #設(shè)置柱的文字說明
    #第一個參數(shù)為文字說明的橫坐標(biāo)
    #第二個參數(shù)為文字說明的內(nèi)容
    pyplot.xticks(range(5),xticks)
    #設(shè)置橫坐標(biāo)的文字說明
    pyplot.xlabel("Types of Students")
    #設(shè)置縱坐標(biāo)的文字說明
    pyplot.ylabel("Frequency")
    #設(shè)置標(biāo)題
    pyplot.title("Numbers of Books Students Read")
    #繪圖
    pyplot.show()
    drawBar(books)

import matplotlib.pyplot as plt
num_list = [1506,3500,3467,1366,200]
pyplot.xlabel("Types of Students")
pyplot.ylabel("Frequency")
pyplot.title("Numbers of Books Students Read")
plt.bar(range(len(num_list)), num_list,color="green")
import seaborn as sns
sns.set_style("whitegrid")
plt.show()

 ②餅形圖。餅形圖是以扇形的面積來指代某種類型的頻率,使用Matplotlib對圖書借閱量這一定性變量繪制餅形圖的代碼如下:

import numpy as np  
import matplotlib.mlab as mlab  
import matplotlib.pyplot as plt  
labels=['A','B','C','D','E']

X=[257,145,32,134,252]
 
fig = plt.figure()
plt.pie(X,labels=labels,autopct='%1.1f%%') #畫餅圖(數(shù)據(jù),數(shù)據(jù)對應(yīng)的標(biāo)簽,百分?jǐn)?shù)保留兩位小數(shù)點)
plt.title("Numbers of Books Student Read")
plt.show()

(2)定量分析

直方圖類似于柱狀圖,是用柱的高度來指代頻數(shù),不同的是其將定量數(shù)據(jù)劃分為若干連續(xù)的區(qū)間,在這些連續(xù)的區(qū)間上繪制柱。

①直方圖。使用Matplotlib對身高這一定量變量繪制直方圖的代碼如下:

#繪制直方圖
def drawHist(heights):
    #創(chuàng)建直方圖
    #第一個參數(shù)為待繪制的定量數(shù)據(jù),不同于定性數(shù)據(jù),這里并沒有實現(xiàn)進(jìn)行頻數(shù)統(tǒng)計
    #第二個參數(shù)為劃分的區(qū)間個數(shù)
    pyplot.hist(heights,100)
    pyplot.xlabel('Heights')
    pyplot.ylabel('Frequency')
    pyplot.title('Height of Students')
    pyplot.show()
drawHist(heights)

累積曲線:使用Matplotlib對身高這一定量變量繪制累積曲線的代碼如下:

#繪制累積曲線
def drawCumulativaHist(heights):
    #創(chuàng)建累積曲線
    #第一個參數(shù)為待繪制的定量數(shù)據(jù)
    #第二個參數(shù)為劃分的區(qū)間個數(shù)
    #normal參數(shù)為是否無量綱化
    #histtype參數(shù)為‘step',繪制階梯狀的曲線
    #cumulative參數(shù)為是否累積
    pyplot.hist(heights,20,normed=True,histtype='step',cumulative=True)
    pyplot.xlabel('Heights')
    pyplot.ylabel('Frequency')
    pyplot.title('Heights of Students')
    pyplot.show()
drawCumulativaHist(heights)

 (3)關(guān)系分析

 散點圖。在散點圖中,分別以自變量和因變量作為橫坐標(biāo)。當(dāng)自變量與因變量線性相關(guān)時,散點圖中的點近似分布在一條直線上。我們以身高作為自變量,體重作為因變量,討論身高對體重的影響。使用Matplotlib繪制散點圖的代碼如下:

#繪制散點圖
def drawScatter(heights,weights):
    #創(chuàng)建散點圖
    #第一個參數(shù)為點的橫坐標(biāo)
    #第二個參數(shù)為點的縱坐標(biāo)
    pyplot.scatter(heights,weights)
    pyplot.xlabel('Heights')
    pyplot.ylabel('Weight')
    pyplot.title('Heights & Weight of Students')
    pyplot.show()
drawScatter(heights,weights)

(4)探索分析

箱型圖。在不明確數(shù)據(jù)分析的目標(biāo)時,我們對數(shù)據(jù)進(jìn)行一些探索性的分析,可以知道數(shù)據(jù)的中心位置、發(fā)散程度及偏差程度。使用Matplotlib繪制關(guān)于身高的箱型圖代碼如下:

#繪制箱型圖
def drawBox(heights):
    #創(chuàng)建箱型圖
    #第一個參數(shù)為待繪制的定量數(shù)據(jù)
    #第二個參數(shù)為數(shù)據(jù)的文字說明
    pyplot.boxplot([heights],labels=['Heights'])
    pyplot.title('Heights of Students')
    pyplot.show()
drawBox(heights)

注:

① 上四分位數(shù)與下四分位數(shù)的差叫四分位差,它是衡量數(shù)據(jù)發(fā)散程度的指標(biāo)之一

② 上界線和下界線是距離中位數(shù)1.5倍四分位差的線,高于上界線或者低于下界線的數(shù)據(jù)為異常值

描述性統(tǒng)計是容易操作、直觀簡潔的數(shù)據(jù)分析手段。但是由于簡單,對于多元變量的關(guān)系難以描述?,F(xiàn)實生活中,自變量通常是多元的:決定體重的不僅有身高,還有飲食習(xí)慣、肥胖基因等因素。通過一些高級的數(shù)據(jù)處理手段,我們可以對多元變量進(jìn)行處理,例如,特征工程中,可以使用互信息方法來選擇多個對因變量有較強(qiáng)相關(guān)性的自變量作為特征,還可以使用主成分分析法來消除一些冗余的自變量來降低運算復(fù)雜度。

以上就是Python可視化繪制圖表的教程詳解的詳細(xì)內(nèi)容,更多關(guān)于Python可視化繪制圖表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 10個使用Python必須知道的內(nèi)置函數(shù)

    10個使用Python必須知道的內(nèi)置函數(shù)

    這篇文章小編主要向大家介紹的是10個使用Python必須知道的內(nèi)置函數(shù)reduce()、split()、map()等,更多后置函數(shù)請看下文
    2021-09-09
  • 如何使用python的ctypes調(diào)用醫(yī)保中心的dll動態(tài)庫下載醫(yī)保中心的賬單

    如何使用python的ctypes調(diào)用醫(yī)保中心的dll動態(tài)庫下載醫(yī)保中心的賬單

    這篇文章主要介紹了如何使用python的ctypes調(diào)用醫(yī)保中心的dll動態(tài)庫下載醫(yī)保中心的賬單,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Python?Flask框架實現(xiàn)Proteus仿真Arduino與網(wǎng)頁數(shù)據(jù)交互

    Python?Flask框架實現(xiàn)Proteus仿真Arduino與網(wǎng)頁數(shù)據(jù)交互

    這篇文章主要介紹了Python?Flask框架實現(xiàn)Proteus仿真Arduino與網(wǎng)頁數(shù)據(jù)交互,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • Python 中如何寫注釋

    Python 中如何寫注釋

    這篇文章主要介紹了如何在 Python 中注釋,幫助其他開發(fā)者理解你的代碼,以及代碼的目的。感興趣的朋友可以了解下
    2020-08-08
  • python如何構(gòu)建mock接口服務(wù)

    python如何構(gòu)建mock接口服務(wù)

    這篇文章主要介紹了python如何構(gòu)建mock接口服務(wù),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python如何使用正則表達(dá)式分割字符串舉4例說明

    Python如何使用正則表達(dá)式分割字符串舉4例說明

    在Python編程中我們經(jīng)常需要對字符串進(jìn)行分割操作,下面這篇文章主要給大家介紹了關(guān)于Python如何使用正則表達(dá)式分割字符串的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • python爬取個性簽名的方法

    python爬取個性簽名的方法

    這篇文章主要為大家詳細(xì)介紹了python爬取個性簽名的方法,具有一定的參考價值,感興趣的朋友可以參考一下
    2018-06-06
  • Python樹的重建實現(xiàn)示例

    Python樹的重建實現(xiàn)示例

    樹的重建是一種從給定的遍歷序列中恢復(fù)原樹結(jié)構(gòu)的算法,本文就來介紹一下Python樹的重建實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Django的Modelforms用法簡介

    Django的Modelforms用法簡介

    這篇文章主要介紹了Django的Modelforms用法簡介,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 基于pytorch padding=SAME的解決方式

    基于pytorch padding=SAME的解決方式

    今天小編就為大家分享一篇基于pytorch padding=SAME的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論