5

matplot libにプロットを作成しましたが、そのプロットにインセットを追加したいと思います。プロットしたいデータは、他の図で使用している辞書の中に保存されています。ループ内でこのデータを見つけ、サブプロットに対してこのループを再度実行します。関連するセグメントは次のとおりです。

leg = []     
colors=['red','blue']
count = 0                     
for key in Xpr: #Xpr holds my data
    #skipping over what I don't want to plot
    if not key[0] == '5': continue 
    if key[1] == '0': continue
    if key[1] == 'a': continue
    leg.append(key)
    x = Xpr[key]
    y = Ypr[key] #Ypr holds the Y axis and is created when Xpr is created
    plt.scatter(x,y,color=colors[count],marker='.')
    count += 1

plt.xlabel(r'$z/\mu$')
plt.ylabel(r'$\rho(z)$')
plt.legend(leg)
plt.xlim(0,10)
#Now I wish to create the inset
a=plt.axes([0.7,0.7,0.8,0.8])
count = 0
for key in Xpr:
    break
    if not key[0] == '5': continue
    if key[1] == '0': continue
    if key[1] == 'a': continue
    leg.append(key)
    x = Xpr[key]
    y = Ypr[key]
    a.plot(x,y,color=colors[count])
    count += 1
plt.savefig('ion density 5per Un.pdf',format='pdf')

plt.cla()

奇妙なことに、インセットの位置を移動しようとしても、以前のインセット(コードの前回の実行からのもの)が取得されます。a=axes([])私は何の明白なこともなくその行をコメントアウトしようとさえしました。サンプルファイルを添付します。なぜそのように振る舞うのですか?曲がった出力の図

4

1 に答える 1

5

簡単な答えはplt.clf()、現在の軸ではなく、図をクリアするものを使用する必要があるということです。はめ込みループにもありbreakます。これは、そのコードが実行されないことを意味します。

単一の軸を使用するよりも複雑なことを始めた場合は、OOインターフェイスを使用するように切り替える価値がありますmatplotlib。最初はもっと複雑に見えるかもしれませんが、の隠された状態について心配する必要はありませんpyplot。コードは次のように書き直すことができます

fig = plt.figure()
ax = fig.add_axes([.1,.1,.8,.8]) # main axes
colors=['red','blue']
for key  in Xpr: #Xpr holds my data
    #skipping over what I don't want to plot
    if not key[0] == '5': continue 
    if key[1] == '0': continue
    if key[1] == 'a': continue
    x = Xpr[key]
    y = Ypr[key] #Ypr holds the Y axis and is created when Xpr is created
    ax.scatter(x,y,color=colors[count],marker='.',label=key)
    count += 1

ax.set_xlabel(r'$z/\mu$')
ax.set_ylabel(r'$\rho(z)$')
ax.set_xlim(0,10)
leg = ax.legend()

#Now I wish to create the inset
ax_inset=fig.add_axes([0.7,0.7,0.3,0.3])
count =0
for key  in Xpr: #Xpr holds my data
    if not key[0] == '5': continue
    if key[1] == '0': continue
    if key[1] == 'a': continue
    x = Xpr[key]
    y = Ypr[key]
    ax_inset.plot(x,y,color=colors[count],label=key)
    count +=1

ax_inset.legend()
于 2012-09-08T17:08:53.393 に答える