Создание встраивания в 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()