Matplotlib imshow twiny()问题

2024-09-29 17:17:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在matplotlib imshow()绘图中有两个相互依赖的x轴。底部x轴是半径的平方,顶部是半径的平方。到目前为止,我已经尝试过:

ax8 = ax7.twiny()
ax8._sharex = ax7
fmtr = FuncFormatter(lambda x,pos: np.sqrt(x) )
ax8.xaxis.set_major_formatter(fmtr)
ax8.set_xlabel("Radius [m]")

其中ax7是y轴和底部x轴(或半径平方)。不是把sqrt(x_底部)作为顶部的记号,我只得到一个从0到1的范围。我该怎么解决这个问题?在

事先非常感谢。在


Tags: lambdapos绘图matplotlibnp半径sqrtset
1条回答
网友
1楼 · 发布于 2024-09-29 17:17:46

你误解了twiny的作用。它使一个完全独立的x轴和一个共享的y轴。在

您要做的是用一个链接的轴使用不同的格式化程序(即共享轴限制,但不共享其他内容)。在

执行此操作的简单方法是手动设置孪生轴的轴限制:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

fig, ax1 = plt.subplots()
ax1.plot(range(10))

ax2 = ax1.twiny()
formatter = FuncFormatter(lambda x, pos: '{:0.2f}'.format(np.sqrt(x)))
ax2.xaxis.set_major_formatter(formatter)

ax2.set_xlim(ax1.get_xlim())

plt.show()

enter image description here

但是,一旦缩放或与绘图交互,就会注意到轴未链接。在

您可以在同一位置添加一个轴,同时使用共享的x轴和y轴,但是记号格式化程序也是共享的。在

因此,最简单的方法就是使用寄生轴。在

举个简单的例子:

^{pr2}$

这张图和上一张图一开始看起来是一样的。当您与绘图交互(例如缩放/平移)时,差异将变得明显。在

相关问题 更多 >

    热门问题