python – 在matplot lib中创建inset

前端之家收集整理的这篇文章主要介绍了python – 在matplot lib中创建inset前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在matplot lib中创建了一个图,我希望在该图中添加一个插图.我希望绘制的数据保存在我在其他图中使用的字典中.我在循环中找到了这个数据,然后我再次为子图运行这个循环.以下是相关部分:

  1. leg = []
  2. colors=['red','blue']
  3. count = 0
  4. for key in Xpr: #Xpr holds my data
  5. #skipping over what I don't want to plot
  6. if not key[0] == '5': continue
  7. if key[1] == '0': continue
  8. if key[1] == 'a': continue
  9. leg.append(key)
  10. x = Xpr[key]
  11. y = Ypr[key] #Ypr holds the Y axis and is created when Xpr is created
  12. plt.scatter(x,y,color=colors[count],marker='.')
  13. count += 1
  14. plt.xlabel(r'$z/\mu$')
  15. plt.ylabel(r'$\rho(z)$')
  16. plt.legend(leg)
  17. plt.xlim(0,10)
  18. #Now I wish to create the inset
  19. a=plt.axes([0.7,0.7,0.8,0.8])
  20. count = 0
  21. for key in Xpr:
  22. break
  23. if not key[0] == '5': continue
  24. if key[1] == '0': continue
  25. if key[1] == 'a': continue
  26. leg.append(key)
  27. x = Xpr[key]
  28. y = Ypr[key]
  29. a.plot(x,color=colors[count])
  30. count += 1
  31. plt.savefig('ion density 5per Un.pdf',format='pdf')
  32. plt.cla()

奇怪的是,当我试图移动插入位置时,我仍然得到之前的插入(来自上一代代码插件).我甚至试图在没有明显的情况下注释掉a = axes([])行.我附上了示例文件.为什么它以这种方式行事?

最佳答案
简单的答案是你应该使用plt.clf()来清除数字,而不是当前的轴.插入循环中还有一个中断,这意味着该代码都不会运行.

当你开始做比使用单轴更复杂的事情时,值得切换到使用matplotlib的OO接口.一开始可能看起来更复杂,但您不必再担心pyplot的隐藏状态.您的代码可以重写为

  1. fig = plt.figure()
  2. ax = fig.add_axes([.1,.1,.8,.8]) # main axes
  3. colors=['red','blue']
  4. for key in Xpr: #Xpr holds my data
  5. #skipping over what I don't want to plot
  6. if not key[0] == '5': continue
  7. if key[1] == '0': continue
  8. if key[1] == 'a': continue
  9. x = Xpr[key]
  10. y = Ypr[key] #Ypr holds the Y axis and is created when Xpr is created
  11. ax.scatter(x,marker='.',label=key)
  12. count += 1
  13. ax.set_xlabel(r'$z/\mu$')
  14. ax.set_ylabel(r'$\rho(z)$')
  15. ax.set_xlim(0,10)
  16. leg = ax.legend()
  17. #Now I wish to create the inset
  18. ax_inset=fig.add_axes([0.7,0.3,0.3])
  19. count =0
  20. for key in Xpr: #Xpr holds my data
  21. if not key[0] == '5': continue
  22. if key[1] == '0': continue
  23. if key[1] == 'a': continue
  24. x = Xpr[key]
  25. y = Ypr[key]
  26. ax_inset.plot(x,label=key)
  27. count +=1
  28. ax_inset.legend()

猜你在找的Python相关文章