擅长:python、mysql、java
<p>可以使用一个光标(或事件处理程序)跟踪两个轴的坐标,方法如下:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
import logging
logger = logging.getLogger(__name__)
class Cursor(object):
def __init__(self):
plt.connect('motion_notify_event', self)
def __call__(self, event):
if event.inaxes is None:
return
x, y1 = ax1.transData.inverted().transform((event.x,event.y))
x, y2 = ax2.transData.inverted().transform((event.x,event.y))
logger.debug('(x,y1,y2)=({x:0.2f}, {y1:0.2f}, {y2:0.2f})'.format(x=x,y1=y1,y2=y2))
logging.basicConfig(level=logging.DEBUG,
format='%(message)s',)
fig, ax1 = plt.subplots()
x = np.linspace(1000, 2000, 500)
y = 100*np.sin(20*np.pi*(x-1500)/2000.0)
fern = Cursor()
ax1.plot(x,y)
ax2 = ax1.twinx()
z = x/200.0
ax2.plot(x,z)
plt.show()
</code></pre>
<p>(当我使用<code>ax2.semilogy(x,z)</code>时,我得到了“太多索引”,但是没有解决这个问题。)</p>
<p><code>ax1.transData.inverted().transform((event.x,event.y))</code>代码在指定的轴上执行从显示坐标到数据坐标的转换,并且可以任意与任一轴一起使用。在</p>