前回に続いて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()
edgecolor
はec
、facecolor
はfc
でもよい。
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()
などがある。
参考
- YutaKaのPython教室 Matplotlib 図形を描く方法(www.yutaka-note.com/entry/matplotlib_patches)
- Pystyle matplotlib – 円、長方形、多角形を描画する方法(pystyle.info/matplotlib-patches/)