是否可以在matplotlib中手动设置辅助轴上的刻度?

u59ebvdq  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(179)

我试图画一个图形,两个x轴和两个y轴由函数连接,我使用下面的代码实现了这一点:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. def q2r(q):
  4. return(2*np.pi)/q
  5. def r2q(r):
  6. return(2*np.pi)/r
  7. def w2t(w):
  8. tau = 1/w
  9. return(tau*(2/0.6583))
  10. def t2w(t):
  11. tau = t/(2/0.6583)
  12. return(1/tau)
  13. x = np.linspace(1,10)
  14. y = x**2
  15. fig, axs = plt.subplots(subplot_kw = {'xlabel':'$\omega / meV$', 'ylabel':'Q / $\AA^{-1}$'})
  16. axs.plot(x,y)
  17. secax_x = axs.secondary_xaxis('top', xlabel='t / ps', functions = (w2t, t2w))
  18. secax_y = axs.secondary_yaxis('right', ylabel = 'r / $\AA$', functions = (q2r, r2q))
  19. # sets ticks on primary axes
  20. axs.set_xticks([2,5,8])
  21. axs.set_yticks([20,50,80])
  22. # does nothing
  23. secax_x.set_xticks([3,1,0.5,0.1])
  24. secax_y.set_yticks([1,0.2,0.01])
  25. plt.show()

因为主轴和次轴之间的关系不是线性的,所以次轴上的刻度挤在一起(示例中的x2)或太少(示例中的y2)。我不希望刻度值相等,但希望手动控制次轴上的刻度位置。是否可以做到这一点?

2sbarzqh

2sbarzqh1#

可以在次轴上使用对数刻度:

  1. x = np.linspace(1,10)
  2. y = x**2
  3. fig, axs = plt.subplots(subplot_kw = {'xlabel':'$\omega / meV$', 'ylabel':'Q / $\AA^{-1}$'})
  4. axs.plot(x,y)
  5. secax_x = axs.secondary_xaxis('top', xlabel='t / ps', functions = (w2t, t2w))
  6. secax_y = axs.secondary_yaxis('right', ylabel = 'r / $\AA$', functions = (q2r, r2q))
  7. secax_x.set_xscale("log")
  8. secax_y.set_yscale("log")
  9. axs.set_yscale("linear")
  10. # sets ticks on primary axes
  11. axs.set_xticks([2,5,8])
  12. axs.set_yticks([20,50,80])
  13. # does nothing
  14. secax_x.set_xticks([3,1,0.5,0.1])
  15. secax_y.set_yticks([1,0.2,0.01])
  16. plt.show()

此快速修复解决了右y轴的问题。模拟然后解决次x轴的问题。

展开查看全部

相关问题