1. ホーム
  2. パイソン

matplotlib.pyplotの軸

2022-02-25 01:54:14
<パス

基本的な考え方

matplotlib.pyplotで

図は白紙の画板である

画板の上 軸(アックス)を持つセット は、その セット要素 は、リージョンを定義する基本的な2軸を含む

パレットの各領域を変更するだけで、もちろんデフォルトでリージョンになっています

そしてサブプロット サブプロットは、実は軸の特殊なケース(サブセット)なのです 明らかにいくつかの軸を取得し、特定の場所に絞り込むことはサブです

<ブロッククオート

ほとんどの人はサブプロットに慣れていると思いますが、これはサブプロットインスタンスの通常の行×列のグリッドに住むAxesの特別なケースに過ぎません。もし、任意の場所に Axes を作成したい場合は、単に 追加_axes() このメソッドは、0-1の相対的な図座標で[left, bottom, width, height]の値のリストを受け取ります。

基本操作

現在のコンフィグレーションの取得

fig1=plt.figure()

軸となるフィールドの設定

ax1 = plt.Axes(fig1,[0.2, 0.2, 0.4, 0.4])

図に軸フィールドを追加する

fig1.add_axes(ax1)

図にサブグラフを追加し、オブジェクトを保持する ax3=fig1.add_subplot(224) #Obviously subplot does not have the general axis field set in the previous step

基本タイプ

fig1:

class 'matplotlib.figure.Figure'

ax1です。

class 'matplotlib.axes._axes.

ax3です。

class 'matplotlib.axes._subplots.AxesSubplot'

パッチモジュール(4つの基本グラフ)

詳細はコードコメント参照

コード例

#Deeper understanding of axes
#An axes is equivalent to a plotting region distributed on a large canvas fig
from matplotlib import pyplot as plt  
from matplotlib import patches
import numpy as np
import cv2
from pylab import *


fig1 = plt.figure(figsize=(8, 5)) # in inches!
ax1 = plt.Axes(fig1,[0.2, 0.2, 0.4, 0.4]) # come to an axis in fig1
#ax.set_axis_off()# remove axes
fig1.add_axes(ax1)#add to fig

ax2 = plt.Axes(fig1,[0.4, 0.4, 0.4, 0.4])# one more axis, in fig1
fig1.add_axes(ax2)#add to fig
print(type(ax1),type(ax2))#observe the type


'''
If I want to add "subplot" directly, it seems that if I use subplot directly, it will draw it directly and overwrite the non-subplot axes in the previous canvas
I can use the add method of fig to add it directly, so it won't overwrite the
'''
# ax3=plt.subplot(224)# will clear the rest of the non-subplot axes
ax3=fig1.add_subplot(224)#will not clear the canvas, the previous axes at the specified position will remain
#plt.subplot(221)#default will draw to the current fig, but the previous specified position of the axes cleared
ax4=fig1.add_subplot(221)#will not clear the canvas, the previous specified location of the axes remain
print(type(ax3),type(ax4))#watch type



# the following four drawing areas in ax1,2,3,4 respectively
x=np.range(0,40*pi,0.001)
y=10*np.cos(x)
ax1.plot(x,y,'r--')
ax2.plot(y,x,'b')
ax3.plot(x,y,'g')
ax4.plot(y,x,'y')


# test the image in ax4
img=cv2.imread(r'E:\my_nut_yun\mycode_python\Image Playground\Chrysanthemum.jpg',0)#Grayscale mode
ax4.imshow(img,cmap='gray',aspect="auto")
ax4.plot([0,300],[0,300],'y',linewidth=10)#draw a line
ax4.set_title('test image')
# s=ax4.get_title() # get its title str type
# print(type(s))


ax5 = fig1.add_subplot(443)
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(1000000) # ~N(0,1)
# divide x into bins according to its range count the number of occurrences of each hist graph
n, bins, patchess=ax5.hist(x, 50, color='g', alpha=0.4,normed=True)#alpha is the transparency normed makes the vertical coordinate is the probability
ax5.set_xlabel('Smarts')
ax5.set_ylabel('Probability')
ax5.set_title('Histogram of IQ')
ax5.text(60, .025, r'$\mu=100,\\sigma=15$')
ax5.grid(True)
binbin=[]
for i in range(len(bins)-1):
    binbin.append((bins[i]+bins[i+1])/2)
#print(binbin)# new value of the horizontal coordinate Take the midpoint of two adjacent
#print(patchess[0]) #rectangles object can be iterated  
ax5.plot(binbin,n,'r--')
patchess[25].set_color('r')
ax5.add_patch(patchess[25])


# test patches  
ax6=fig1.add_subplot(3,3,7)
Rectangle((20,20),20,20,linewidth=3, edgecolor='b', facecolor='r')
circle = patches.Circle((50,50), 10, color = "r")  
Ellipse((0,0), 18, 24, color= "y") # circle center long diameter short diameter 
polygon = patches.RegularPolygon((80,80), 6,20 , color= "b") #Polygon: center Number of sides "radius" 

ax6.add_patch(rec)
ax6.add_patch(circle)
ax6.add_patch(ellipse)  
ax6.add_patch(polygon)  
ax6.set_xlim(0,100)
ax6.set_ylim(0,100)
ax6.axis("equal")  



show()




成果