1. ホーム
  2. パイソン

[解決済み】pyplotで円をプロットする

2022-04-09 18:12:32

質問

私はこれのいくつかのバリエーションを試したが、中心 (x,y) と半径 r を入力として matplotlib.pyplot (pylab は使わないでください) で円を描く方法についてのまっすぐな説明を見つけることができなかった。

import matplotlib.pyplot as plt
circle=plt.Circle((0,0),2)
# here must be something like circle.plot() or not?
plt.show()

... でも、まだうまくいきませんでした。

解決方法は?

軸に追加する必要があります。A Circle のサブクラスです。 Patch axes には add_patch メソッドを使用します。(また add_artist が、お勧めしません)。

これを行う例です。

import matplotlib.pyplot as plt

circle1 = plt.Circle((0, 0), 0.2, color='r')
circle2 = plt.Circle((0.5, 0.5), 0.2, color='blue')
circle3 = plt.Circle((1, 1), 0.2, color='g', clip_on=False)

fig, ax = plt.subplots() # note we must use plt.subplots, not plt.subplot
# (or if you have an existing figure)
# fig = plt.gcf()
# ax = fig.gca()

ax.add_patch(circle1)
ax.add_patch(circle2)
ax.add_patch(circle3)

fig.savefig('plotcircles.png')

この結果、次のような図になります。

最初の円は原点にありますが、デフォルトでは clip_onTrue を超えると切り取られます。 axes . 3番目の円(緑)は Artist . 軸からはみ出します(ただし、図からははみ出さない、つまり図のサイズは ではない は、すべてのアーティストをプロットできるように自動的に調整されます)。

x、y、radiusの単位は、デフォルトでデータ単位に対応しています。この場合、軸には何もプロットしていません( fig.gca() 限界値が設定されていないため、デフォルトでは x と y の範囲が 0 から 1 になっています。

ここでは、この例の続きとして、単位がどのように重要であるかを説明します。

circle1 = plt.Circle((0, 0), 2, color='r')
# now make a circle with no fill, which is good for hi-lighting key results
circle2 = plt.Circle((5, 5), 0.5, color='b', fill=False)
circle3 = plt.Circle((10, 10), 2, color='g', clip_on=False)
    
ax = plt.gca()
ax.cla() # clear things for fresh plot

# change default range so that new circles will work
ax.set_xlim((0, 10))
ax.set_ylim((0, 10))
# some data
ax.plot(range(11), 'o', color='black')
# key data point that we are encircling
ax.plot((5), (5), 'o', color='y')
    
ax.add_patch(circle1)
ax.add_patch(circle2)
ax.add_patch(circle3)
fig.savefig('plotcircles2.png')

という結果になります。

2つ目の円の塗りつぶしを設定したのがわかると思います。 False これは、重要な結果(黄色のデータポイントなど)を囲むのに便利です。