Создание встраивания в matplot lib

Я создал сюжет в 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([]) линия без каких-либо видимых. Я прилагаю файл примера. Почему это так? Фигура кривого выхода

1 ответ

Решение

Ответ прост: вы должны использовать 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()
Другие вопросы по тегам