【Python】 matplotlibライブラリのpatchesモジュールで図形を描画

ICT

 前回に続いてPythonで図形を描画。
 今回はmatplotlibライブラリのpatchesモジュールを使ってみる。

スポンサーリンク

円を描く

 円の描画は、
 patches.Circle(中心座標,radius=半径)

 pyplot.axes().add_patch()
の中に入れる。

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.patches as pat
cc = pat.Circle((0,0),radius=4)
plt.axes().add_patch(cc)
plt.axis('scaled')
plt.show()

 画面全体が青色で塗りつぶされる場合、おそらくX軸とY軸の範囲が0~1になっているので、
 plt.axes().autoscale()
を加えるか
 plt.plot([-10,10,10,-10,-10],[-10,-10,10,10,-10],"-",color="black")
で適当に枠を描いたりするか
 plt.axis([-10,10,-10,10])
を加えるなどすれば、青色の円が表示される。

 plt.axis('scaled')
を入れると
 縦横比(XY比)が1:1(正方)になる。入れないと(上図の場合)横長に表示される。
 前回の
 plt.axes().set_aspect('equal')
と同じ。

 edgecolorで枠線の色、facecolorで図形(下図の場合、円)内側の色選択。

 以下のコードは最初のimport部分省略。

plt.plot([-10,10,10,-10,-10],[-10,-10,10,10,-10],"-",color="black")
cc = pat.Circle((0,0),radius=6,facecolor="blue",
edgecolor="blue")
cc2 = pat.Circle((0,0),radius=4.5,facecolor="white",
edgecolor="white")
cc3 = pat.Circle((0,0),radius=2,facecolor="red",
edgecolor="red")
cc4 = pat.Circle((0,0),radius=1,facecolor="white",
edgecolor="white")
cc5 = pat.Circle((1,1),radius=0.3,facecolor="yellow",
edgecolor="yellow")
plt.axes().add_patch(cc)
plt.axes().add_patch(cc2)
plt.axes().add_patch(cc3)
plt.axes().add_patch(cc4)
plt.axes().add_patch(cc5)
plt.axis('scaled')
plt.show()
スポンサーリンク

多角形を描く

 正多角形の描画は、
 .RegularPolygon (中心座標,頂点数,radius)

 円の内側に正五角形と正六角形を描画。

plt.plot([-10,10,10,-10,-10],[-10,-10,10,10,-10],"-",color="black")
cc = pat.Circle((0,0),radius=4)
plt.axes().add_patch(cc)
rp = pat.RegularPolygon((0,0),5,radius=4,
fc="yellow",ec="yellow")
plt.axes().add_patch(rp)
cc2 = pat.Circle((7,7),radius=1)
plt.axes().add_patch(cc2)
rp2 = pat.RegularPolygon((7,7),6,radius=1,
fc="yellow",ec="yellow")
plt.axes().add_patch(rp2)
plt.axis('scaled')
plt.show()

 edgecolorecfacecolorfcでもよい。

 orientationで回転させることもできるが、今回は省略。指定単位はラジアン rad

 一般の多角形(ポリゴン)は、
 .Polygon (座標)

pp = pat.Polygon([(-7,7),(6,4),(7,-7),(-5,-5),(-7,7)],ec="green",fill=False)
plt.axes().add_patch(pp)

 fill=Falseならばポリゴン内の色無し(透明)。

楕円、弧を描いてみる

 楕円は、
 .Ellipse(中心座標,width,height)

 弧は、
 .Arc(中心座標,width,height, theta1=開始角度,theta2=終了角度)
 角度の指定単位は度 °
 楕円の一部。

 下のコードの上5行は(前回の)patchesモジュールを使わない場合。

import numpy as np
t = np.linspace(0,np.pi*2,50)
x = 6 * np.sin(t)
y = 5 * np.cos(t)
plt.plot(x,y,"-",color="black",lw=10)
plt.plot([-10,10,10,-10,-10],[-10,-10,10,10,-10],"-",color="black")
er = pat.Ellipse((2,2),width=4,height=2,fc="black")
plt.axes().add_patch(er)
el = pat.Ellipse((-2,2),width=4,height=2,fc="black")
plt.axes().add_patch(el)
cr = pat.Circle((1.5,2),radius=0.8,fc="red")
plt.axes().add_patch(cr)
cl = pat.Circle((-1.5,2),radius=0.8,fc="red")
plt.axes().add_patch(cl)
cc = pat.Circle((0,0),radius=0.5,fc="black")
plt.axes().add_patch(cc)
ac = pat.Arc((0.5,-0.5),width=3,height=2,
theta1=220,theta2=360,ec="red",lw=5)
plt.axes().add_patch(ac)
plt.axis('scaled')
plt.show()

 angleで回転させることもできる。斜め楕円。指定単位は度 °
 弧もangleで回転できる。

 例えば、楕円の右目を45°時計回り(-45°反時計回り)に回転させる場合、

er = pat.Ellipse((2,2),width=4,height=2,angle=-45,fc="black")
plt.axes().add_patch(er)

 目がはみ出たので小さくした。

 回転方向間違えると


 他にも四角形 .Rectangle()、扇形 .Wedge()などがある。

 参考

スポンサーリンク
ふシゼン
タイトルとURLをコピーしました