3

現在、一連のプロットを生成する必要があるプログラムを作成しています。各プロットには、半径がデータセットによって決定される 3 つの同心円が必要です。さらに、別の中心を持つ別の赤色の円も追加する必要があります。しかし、私はさまざまな問題に遭遇しました。円の半径が大きすぎない限り、プロットに 3 つの黒い円と 1 つの赤い円が表示されるはずですが、表示されません。

プロットを作成するコードの一部を分離しました。ここにあります-

import matplotlib.pyplot as plt

fig1 = plt.figure(1, figsize=(6,6))
plt.xlim(-30,30)
plt.ylim(-30,30)

rcircle1 = plt.Circle( (0,0), 6.0, edgecolor="black", facecolor="white")
rcircle2 = plt.Circle( (0,0), 12.0, edgecolor="black", facecolor="white")
rcircle3 = plt.Circle( (0,0), 18.0, edgecolor="black", facecolor="white")
bcircle = plt.Circle( (8.5,-5.8)  ,2,  edgecolor="red", facecolor="white")

ax = fig1.gca()
ax.add_artist(rcircle1)
ax.add_artist(rcircle2)
ax.add_artist(rcircle3)
ax.add_artist(bcircle)

fig1.savefig("Model.png", dpi=150)

上記の出力は -

上記のコードの出力。

関連するさまざまなクラス変数を調べてみましたが、この動作に影響を与えている可能性のあるものCircle()add_artist()見つけることができませんでした。

私の現在の回避策は次のコードです-

import numpy as np
import matplotlib.pyplot as plt

th = np.arange(-3.14,3.14,0.01)

fig1 = plt.figure(1,figsize=(6,6))
plt.xlim(-30,30)
plt.ylim(-30,30)

plt.plot( 6*np.cos(th), 6*np.sin(th), color="black")
plt.plot( 12*np.cos(th), 12*np.sin(th), color="black")
plt.plot( 18*np.cos(th), 18*np.sin(th), color="black")
# (8,5, -5,8)
plt.plot( 2*np.cos(th) + 8.5, 2*np.sin(th) - 5.8, color="red")

fig1.savefig("Hard.png", dpi=150)

上記のコードによって生成された出力は、まさに私がなりたいものです!

ここに画像の説明を入力

これは機能しCircle()ますが、matplotlib に同様のメソッドを含めるという目的が無効になります。最初のコードが期待どおりに機能しない理由を誰かコメントできますか?

4

1 に答える 1

6

あなたの問題はfacecolor議論です。最後に最大の円を追加していて、中心が不透明です。

2 番目の例では、「塗りつぶされた」円ではなく、線をプロットしています。

円を追加する順序を変更する (またはzorderkwarg を指定する) か、facecolor='none'(注: "none"object ではなくstring です) を渡して、「塗りつぶさNoneれていない」円を取得します。

于 2013-05-10T11:36:25.173 に答える