下圖是要畫的組合圖的樣式旨剥,用到的核心方法是plt.axes方法机久。方法內的參數是一個list,由左下角坐標藏鹊,寬润讥,高組成:[x,y,w,h](圖中打勾處),注意在構建list的時候考慮進去圖與圖的間隙盘寡,圖中的0.02
組合圖樣式
自定義子圖
#自定義子圖區(qū)域楚殿,需要先構建一個list
#由左下角坐標,寬竿痰,高組成脆粥,來生成子圖[x,y,w,h]
left_x,left_y=0.1,0.1
width,height=0.65,0.65
left_xh=left_x+width+0.02
left_yh=left_y+height+0.02
scatter_area=[left_x,left_y,width,height]
hist_x=[left_xh,left_y,0.2,height]
hist_y=[left_x,left_yh,width,0.2]
plt.figure(1, figsize=(8, 8))
#生成子圖的方法用到plt.axes
area_scatter=plt.axes(scatter_area)
area_histx=plt.axes(hist_x)
area_histy=plt.axes(hist_y)
plt.show()
自定義子圖
再在每個圖里添加要畫的曲線
最終結果
結果
難點是怎么進行坐標軸的統(tǒng)一,步驟如下砌溺,先畫好散點圖
#統(tǒng)計散點圖,畫概率分布圖
#設置概率分布圖的bins的寬度
binwidth=0.25
#統(tǒng)計最大的x值变隔,最大的y值
#np.fabs()返回絕對值
xymax=np.max([np.max(np.fabs(x)),np.max(np.fabs(y))])
#bin的數量
N_bins=int(xymax/binwidth)+1
#最大坐標
lim=N_bins*binwidth
#最小坐標
nlim=-lim
#坐標軸的分布
#注意:np.arange(1,5,1)>>>[1,2,3,4],沒有最后的5抚吠,所以最大值應選用lim+binwidth
bins=np.arange(nlim,lim+binwidth,binwidth)
#根據取得的坐標分布,將散點圖的坐標軸與此對應
area_scatter.set_xlim(nlim,lim)
area_scatter.set_ylim(nlim,lim)
#設置概率分布圖的坐標
area_histx.set_xlim(area_scatter.get_xlim())
area_histy.set_ylim(area_scatter.get_ylim())
完整程序及注釋
#組合圖
import numpy as np
from matplotlib import pyplot as plt
# the random data
x = np.random.randn(1000)
y = np.random.randn(1000)
#自定義子圖區(qū)域弟胀,需要先構建一個list,由左下角坐標喊式,寬孵户,高組成,來生成子圖[x,y,w,h]
left_x,left_y=0.1,0.1
width,height=0.65,0.65
left_xh=left_x+width+0.02
left_yh=left_y+height+0.02
scatter_area=[left_x,left_y,width,height]
hist_x=[left_x,left_yh,width,0.2]
hist_y=[left_xh,left_y,0.2,height]
plt.figure(1, figsize=(8, 8))
#生成子圖的方法用到plt.axes
area_scatter=plt.axes(scatter_area)
area_histx=plt.axes(hist_x)
area_histy=plt.axes(hist_y)
#畫散點圖
area_scatter.scatter(x, y)
#統(tǒng)計散點圖岔留,畫概率分布圖
#設置概率分布圖的bins的寬度
binwidth=0.25
#統(tǒng)計最大的x值夏哭,最大的y值
#np.fabs()返回絕對值
xymax=np.max([np.max(np.fabs(x)),np.max(np.fabs(y))])
#bin的數量
N_bins=int(xymax/binwidth)+1
#最大坐標
lim=N_bins*binwidth
#最小坐標
nlim=-lim
#坐標軸的分布
bins=np.arange(nlim,lim+binwidth,binwidth)
#根據取得的坐標分布,將散點圖的坐標軸與此對應
area_scatter.set_xlim(nlim,lim)
area_scatter.set_ylim(nlim,lim)
#畫出概率分布圖
area_histx.hist(x, bins=bins)
area_histy.hist(y, bins=bins, orientation='horizontal')
#設置概率分布圖的坐標
area_histx.set_xlim(area_scatter.get_xlim())
area_histy.set_ylim(area_scatter.get_ylim())
plt.show()