㈠ python繪圖中的四個繪圖技巧
pre{overflow-x: auto}技巧1: plt.subplots()
技巧2: plt.subplot()
技巧3: plt.tight_layout()
技巧4: plt.suptitle()
數據集:
讓我們導入包並更新圖表的默認設置,為圖表添加一點個人風格。 我們將在提示上使用 Seaborn 的內置數據集:
import seaborn as sns # v0.11.2 import matplotlib.pyplot as plt # v3.4.2 sns.set(style='darkgrid', context='talk', palette='rainbow')df = sns.load\_dataset('tips') df.head()技巧1: plt.subplots()
繪制多個子圖的一種簡單方法是使用 plt.subplots() 。
這是繪制 2 個並排子圖的示例語法:
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10,4)) sns.histplot(data=df, x='tip', ax=ax[0]) sns.boxplot(data=df, x='tip', ax=ax[1]);
在這里,我們在一個圖中繪制了兩個子圖。 我們可以進一步自定義每個子圖。
例如,我們可以像這樣為清談隱每個子圖添加標題:
fig, ax = plt.subplots(1, 2, figsize=(10,4)) sns.histplot(data=df, x='tip', ax=ax[0]) ax[0].set\_title("Histogram") sns.boxplot(data=df, x='tip', ax=ax[1]) ax[1].set\_title("Boxplot");
在循環中將所有數值變數用同一組圖表示:
numerical = df.select\_dtypes('number').columnsfor col in numerical: fig, ax = plt.subplots(1, 2, figsize=(10,4)) sns.histplot(data=df, x=col, ax=ax[0]) sns.boxplot(data=df, x=col, ax=ax[1]); 技巧2: plt.subplot()另一種可視化多個圖形的方法是使用 plt.subplot(), 末尾沒有 s
語法與之前略有不同:
plt.figure(figsize=(10,4)) ax1 = plt.subplot(1,2,1) sns.histplot(data=df, x='tip', ax=ax1) ax2 = plt.subplot(1,2,2) sns.boxplot(data=df, x='tip', ax=ax2);
當我們想為多個圖繪制相同類型的圖形並在單個圖中查看所有圖形,該方法特別有用:
plt.figure(figsize=(14,4)) for i, col in enumerate(numerical): ax = plt.subplot(1, len(numerical), i+1) 侍培 sns.boxplot(data=df, x=col, ax=ax)
我們同樣能定製子圖形。例如加個 title
plt.figure(figsize=(14,4)) for i, col in enumerate(numerical): ax = plt.subplot(1, len(numerical), i+1) 答廳 sns.boxplot(data=df, x=col, ax=ax) ax.set\_title(f"Boxplot of {col}")
通過下面的比較,我們能更好的理解它們的相似處與不同處熟悉這兩種方法很有用,因為它們可以在不同情況下派上用場。
技巧3: plt.tight_layout()在繪制多個圖形時,經常會看到一些子圖的標簽在它們的相鄰子圖上重疊,
如下所示:
categorical = df.select\_dtypes('category').columnsplt.figure(figsize=(8, 8)) for i, col in enumerate(categorical): ax = plt.subplot(2, 2, i+1) sns.countplot(data=df, x=col, ax=ax)
頂部兩個圖表的 x 軸上的變數名稱被剪掉,右側圖的 y 軸標簽與左側子圖重疊.使用 plt.tight_layout 很方便
plt.figure(figsize=(8, 8)) for i, col in enumerate(categorical): ax = plt.subplot(2, 2, i+1) sns.countplot(data=df, x=col, ax=ax) plt.tight\_layout()
專業 看起來更好了。
技巧4: plt.suptitle()真個圖形添加標題:
plt.figure(figsize=(8, 8)) for i, col in enumerate(categorical): ax = plt.subplot(2, 2, i+1) sns.countplot(data=df, x=col, ax=ax) plt.suptitle('Category counts for all categorical variables') plt.tight\_layout()此外,您可以根據自己的喜好自定義各個圖。 例如,您仍然可以為每個子圖添加標題。
到此這篇關於python繪圖 四個繪圖技巧的文章就介紹到這了,希望大家以後多多支持!
㈡ 求教python一個作圖的問題
matplotlib 是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合互動式地行制圖。而且也可以方便地將它作為繪圖控制項,嵌入GUI應用程序中。
它的文檔相當完備,並且Gallery頁面中有上百幅縮略圖,打開之後都有源程序。因此如果你需要繪制某種類型的圖,只需要在這個頁面中瀏覽/復制/粘貼一下,基本上都能搞定。
在Linux下比較著名的數據圖工具還有gnuplot,這個是免費的,Python有一個包可以調用gnuplot,但是語法比較不習慣,而且畫圖質量不高。
而Matplotlib則比較強:Matlab的語法、python語言、latex的畫圖質量(還可以使用內嵌的latex引擎繪制的數學公式)。
本文目錄
1.Matplotlib.pyplot快速繪圖
2.面向對象畫圖
3.Matplotlib.pylab快速繪圖
4.在圖表中顯示中文
5.對LaTeX數學公式的支持
6.對數坐標軸
7.學習資源
Matplotlib.pyplot快速繪圖
快速繪圖和面向對象方式繪圖
matplotlib實際上是一套面向對象的繪圖庫,它所繪制的圖表中的每個繪圖元素,例如線條Line2D、文字Text、刻度等在內存中都有一個對象與之對應。
為了方便快速繪圖matplotlib通過pyplot模塊提供了一套和MATLAB類似的繪圖API,將眾多繪圖對象所構成的復雜結構隱藏在這套API內部。我們只需要調用pyplot模塊所提供的函數就可以實現快速繪圖以及設置圖表的各種細節。pyplot模塊雖然用法簡單,但不適合在較大的應用程序中使用。
為了將面向對象的繪圖庫包裝成只使用函數的調用介面,pyplot模塊的內部保存了當前圖表以及當前子圖等信息。當前的圖表和子圖可以使用plt.gcf()和plt.gca()獲得,分別表示"Get Current Figure"和"Get Current Axes"。在pyplot模塊中,許多函數都是對當前的Figure或Axes對象進行處理,比如說:
plt.plot()實際上會通過plt.gca()獲得當前的Axes對象ax,然後再調用ax.plot()方法實現真正的繪圖。
可以在Ipython中輸入類似"plt.plot??"的命令查看pyplot模塊的函數是如何對各種繪圖對象進行包裝的。
配置屬性
matplotlib所繪制的圖表的每個組成部分都和一個對象對應,我們可以通過調用這些對象的屬性設置方法set_*()或者pyplot模塊的屬性設置函數setp()設置它們的屬性值。
因為matplotlib實際上是一套面向對象的繪圖庫,因此也可以直接獲取對象的屬性
配置文件
繪制一幅圖需要對許多對象的屬性進行配置,例如顏色、字體、線型等等。我們在繪圖時,並沒有逐一對這些屬性進行配置,許多都直接採用了matplotlib的預設配置。
matplotlib將這些預設配置保存在一個名為「matplotlibrc」的配置文件中,通過修改配置文件,我們可以修改圖表的預設樣式。配置文件的讀入可以使用rc_params(),它返回一個配置字典;在matplotlib模塊載入時會調用rc_params(),並把得到的配置字典保存到rcParams變數中;matplotlib將使用rcParams字典中的配置進行繪圖;用戶可以直接修改此字典中的配置,所做的改變會反映到此後創建的繪圖元素。
繪制多子圖(快速繪圖)
Matplotlib 里的常用類的包含關系為Figure -> Axes -> (Line2D, Text, etc.)一個Figure對象可以包含多個子圖(Axes),在matplotlib中用Axes對象表示一個繪圖區域,可以理解為子圖。
可以使用subplot()快速繪制包含多個子圖的圖表,它的調用形式如下:
subplot(numRows, numCols, plotNum)
subplot將整個繪圖區域等分為numRows行* numCols列個子區域,然後按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1。如果numRows,numCols和plotNum這三個數都小於10的話,可以把它們縮寫為一個整數,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的區域中創建一個軸對象。如果新創建的軸和之前創建的軸重疊的話,之前的軸將被刪除。
subplot()返回它所創建的Axes對象,我們可以將它用變數保存起來,然後用sca()交替讓它們成為當前Axes對象,並調用plot()在其中繪圖。
繪制多圖表(快速繪圖)
如果需要同時繪制多幅圖表,可以給figure()傳遞一個整數參數指定Figure對象的序號,如果序號所指定的Figure對象已經存在,將不創建新的對象,而只是讓它成為當前的Figure對象。
import numpy as np
import matplotlib.pyplot as plt
plt.figure(1) # 創建圖表1
plt.figure(2) # 創建圖表2
ax1 = plt.subplot(211) # 在圖表2中創建子圖1
ax2 = plt.subplot(212) # 在圖表2中創建子圖2
x = np.linspace(0, 3, 100)
for i in xrange(5):
plt.figure(1) #❶ # 選擇圖表1
plt.plot(x, np.exp(i*x/3))
plt.sca(ax1) #❷ # 選擇圖表2的子圖1
plt.plot(x, np.sin(i*x))
plt.sca(ax2) # 選擇圖表2的子圖2
plt.plot(x, np.cos(i*x))
plt.show()
在圖表中顯示中文
matplotlib的預設配置文件中所使用的字體無法正確顯示中文。為了讓圖表能正確顯示中文,可以有幾種解決方案。
在程序中直接指定字體。
在程序開頭修改配置字典rcParams。
修改配置文件。
matplotlib輸出圖象的中文顯示問題
上面那個link里的修改matplotlibrc方式,我試了好幾次都沒成功。能work的一個比較簡便粗暴的方式(但不知道有沒有副作用)是,1.找到字體目錄YOURPYTHONHOMELibsite-packagesmatplotlibmpl-datafonts tf下的Vera.ttf。這里我們用中文楷體(可以從windows/system32/fonts拷貝過來,對於win8字體文件不是ttf的可以從網上下一個微軟雅黑),直接張貼到前面的ttf目錄下,然後更名為Vera.ttf。2.中文字元串用unicode格式,例如:u''測試中文顯示'',代碼文件編碼使用utf-8 加上" #coding = utf-8 "一行。
面向對象畫圖
matplotlib API包含有三層,Artist層處理所有的高層結構,例如處理圖表、文字和曲線等的繪制和布局。通常我們只和Artist打交道,而不需要關心底層的繪制細節。
直接使用Artists創建圖表的標准流程如下:
創建Figure對象
用Figure對象創建一個或者多個Axes或者Subplot對象
調用Axies等對象的方法創建各種簡單類型的Artists
importmatplotlib.pyplot as plt
X1 = range(0, 50)Y1 = [num**2 for num in X1] # y = x^2X2 = [0, 1]Y2 = [0, 1] # y = x
Fig = plt.figure(figsize=(8,4)) # Create a `figure'instanceAx = Fig.add_subplot(111) # Create a `axes'instancein the figureAx.plot(X1, Y1, X2, Y2) # Create a Line2Dinstancein the axes
Fig.show()Fig.savefig("test.pdf")
㈢ python繪圖篇
1,xlable,ylable設置x,y軸的標題文字。
2,title設置標題。
3,xlim,ylim設置x,y軸顯示範圍。
plt.show()顯示繪圖窗口,通常情況下,show()會阻礙程序運行,帶-wthread等參數的環境下,窗口不會關閉。
plt.saveFig()保存圖像。
面向對象繪圖
1,當前圖表和子圖可以用gcf(),gca()獲得。
subplot()繪制包含多個圖表的子圖。
configure subplots,可調節子圖與圖表邊框距離。
可以通過修改配置文件更改對象屬性。
圖標顯示中文
1,在程序中直接指定字體。
2, 在程序開始修改配置字典reParams.
3,修改配置文件。
Artist對象
1,圖標的繪制領域。
2,如何在FigureCanvas對象上繪圖。
3,如何使用Renderer在FigureCanvas對象上繪圖。
FigureCanvas和Render處理底層圖像操作,Artist處理高層結構。
分為簡單對象和容器對象,簡單的Aritist是標準的繪圖元件,例如Line 2D,Rectangle,Text,AxesImage等,而容器類型包含許多簡單的的 Aritist對象,使他們構成一個整體,例如Axis,Axes,Figure等。
直接創建Artist對象進項繪圖操作步奏:
1,創建Figure對象(通過figure()函數,會進行許多初始化操作,不建議直接創建。)
2,為Figure對象創建一個或多個Axes對象。
3,調用Axes對象的方法創建各類簡單的Artist對象。
Figure容器
如何找到指定的Artist對象。
1,可調用add_subplot()和add_axes()方法向圖表添加子圖。
2,可使用for循環添加柵格。
3,可通過transform修改坐標原點。
Axes容器
1,patch修改背景。
2,包含坐標軸,坐標網格,刻度標簽,坐標軸標題等內容。
3,get_ticklabels(),,get-ticklines獲得刻度標簽和刻度線。
1,可對曲線進行插值。
2,fill_between()繪制交點。
3,坐標變換。
4,繪制陰影。
5,添加註釋。
1,繪制直方圖的函數是
2,箱線圖(Boxplot)也稱箱須圖(Box-whisker Plot),是利用數據中的五個統計量:最小值、第一四分位
數、中位數、第三四分位數與最大值來描述數據的一種方法,它可以粗略地看出數據是否具有對稱性以及分
布的分散程度等信息,特別可以用於對幾個樣本的比較。
3,餅圖就是把一個圓盤按所需表達變數的觀察數劃分為若干份,每一份的角度(即面積)等價於每個觀察
值的大小。
4,散點圖
5,QQ圖
低層繪圖函數
類似於barplot(),dotchart()和plot()這樣的函數採用低層的繪圖函數來畫線和點,來表達它們在頁面上放置的位置以及其他各種特徵。
在這一節中,我們會描述一些低層的繪圖函數,用戶也可以調用這些函數用於繪圖。首先我們先講一下R怎麼描述一個頁面;然後我們講怎麼在頁面上添加點,線和文字;最後講一下怎麼修改一些基本的圖形。
繪圖區域與邊界
R在繪圖時,將顯示區域劃分為幾個部分。繪制區域顯示了根據數據描繪出來的圖像,在此區域內R根據數據選擇一個坐標系,通過顯示出來的坐標軸可以看到R使用的坐標系。在繪制區域之外是邊沿區,從底部開始按順時針方向分別用數字1到4表示。文字和標簽通常顯示在邊沿區域內,按照從內到外的行數先後顯示。
添加對象
在繪制的圖像上還可以繼續添加若干對象,下面是幾個有用的函數,以及對其功能的說明。
•points(x, y, ...),添加點
•lines(x, y, ...),添加線段
•text(x, y, labels, ...),添加文字
•abline(a, b, ...),添加直線y=a+bx
•abline(h=y, ...),添加水平線
•abline(v=x, ...),添加垂直線
•polygon(x, y, ...),添加一個閉合的多邊形
•segments(x0, y0, x1, y1, ...),畫線段
•arrows(x0, y0, x1, y1, ...),畫箭頭
•symbols(x, y, ...),添加各種符號
•legend(x, y, legend, ...),添加圖列說明
㈣ python matplotlib模塊 如何畫兩張圖出來
python matplotlib模塊 如何畫兩張圖出來的方法:
代碼如下所示:
import numpy as np
import matplotlib.pyplot as plt
#創建自變數數組
x= np.linspace(0,2*np.pi,500)
#創建函數值數組
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x*x)
#創建圖形
plt.figure(1)
'''
意思是在一個2行2列共4個子圖的圖中,定位第1個圖來進行操作(畫圖)。
最後面那個1表示第1個子圖。那個數字的變化來定位不同的子圖
'''
#第一行第一列圖形
ax1 = plt.subplot(2,2,1)
#第一行第二列圖形
ax2 = plt.subplot(2,2,2)
#第二行
ax3 = plt.subplot(2,1,2)
#選擇ax1
plt.sca(ax1)
#繪制紅色曲線
plt.plot(x,y1,color='red')
#限制y坐標軸范圍
plt.ylim(-1.2,1.2)
#選擇ax2
plt.sca(ax2)
#繪制藍色曲線
plt.plot(x,y2,'b--')
plt.ylim(-1.2,1.2)
#選擇ax3
plt.sca(ax3)
plt.plot(x,y3,'g--')
plt.ylim(-1.2,1.2)
plt.show()
附上效果圖。
㈤ python中fig,ax=plt.subplots什麼意思
fig,ax=plt.subplots的意思是將plt.subplots()函數的返回值賦值給fig和ax兩個變數。
plt.subplots()是一個函數,返回一個包含figure和axes對象的元組,因此,使用fig,ax=plt.subplots()將元組分解為fig和ax兩個變數。
通常,我們只用到ax:
fig,ax = plt.subplots(nrows=2, ncols=2)
axes = ax.flatten()
把父圖分成2*2個子圖,ax.flatten()把子圖展開賦值給axes,axes[0]便是第一個子圖,axes[1]是第二個。
(5)python繪制大小不同的子圖擴展閱讀
在matplotlib中,整個圖像為一個Figure對象。在Figure對象中可以包含一個或者多個Axes對象。每個Axes(ax)對象都是一個擁有自己坐標系統的繪圖區域。所屬關系如下:
def subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
subplot_kw=None, gridspec_kw=None, **fig_kw):
參數:
nrows,ncols:子圖的行列數。
sharex, sharey:
設置為 True 或者 『all』 時,所有子圖共享 x 軸或者 y 軸,
設置為 False or 『none』 時,所有子圖的 x,y 軸均為獨立,
設置為 『row』 時,每一行的子圖會共享 x 或者 y 軸,
設置為 『col』 時,每一列的子圖會共享 x 或者 y 軸。
返回值
fig:matplotlib.figure.Figure對象
ax:子圖對象(matplotlib.axes.Axes)或者是他的數組
㈥ python之pyplot
1、 定義x和y,畫圖展示,保存圖片
其中dpi參數指定圖像的解析度為120
2、 優化繪圖線條風格
線條顏色color
線條標記marker
線條風格linestyle
3、 坐標軸的控制
坐標軸范圍和標題
坐標圖上標記
坐標間隔設定
函數plt.xticks()和plt.xticks()用來實現對x軸和y軸坐標間隔(也就是軸雀兆記號)的設定。用法上,函蠢蔽數的輸入是兩個列表,第一個表示取值,第二個表示標記。當然如果你的標記就是取值本身,則第二個列表可以忽略
多圖與子圖
figure() 函數可以幫助我們同時處理生成多個圖,而subplot()函數則用來實現,在一個大圖中,出現多個小的子圖。需要注意的是, figure() 中的參數為圖片序號,一般是按序增加的,這裡面還涉及一個當前圖的概念,其中 subplot() 的參數有3個,分別為行數、列數、以及子圖序號。比如 subplot(1,2,1) 表示這是一個1行,2列布局的圖(兩個子圖,在同一行,分居左右),其中,當前處理的子圖是第一個圖(也就是左頃檔租圖)。
這樣,我們就用一個腳本畫了兩張圖fig.1和fig.2。其中,fig.1包含了分居左右的兩個子圖,分別是y1和y3的曲線;fig.2是一張整圖,畫的是y2曲線。
如果想要某個子圖占據整行或者整列,可以採用下面
第三個圖,實際上相當於將前面的兩個小的子圖看作是一個整圖