首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python鼠标使用twinx()单击event.xdata

Python鼠标使用twinx()单击event.xdata
EN

Stack Overflow用户
提问于 2021-04-16 17:25:57
回答 2查看 89关注 0票数 1

我正在使用canvas.mpl_connect鼠标单击侦听器来绘制我的100x100等值线图,其中xlim从0到99。这样做,我得到了例如x,y= 10,20。但是,我必须显示具有不同坐标的第二个x轴(例如,xlim从0.01到1),但我不希望event.xdata以第二个轴的样式返回坐标。有这样做的可能性吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-16 19:21:25

您可以使用matplotlib中的transformations。您可能希望从ax2中的数据坐标转换为显示坐标(这在两个轴之间是通用的),然后转换为ax1的数据坐标。有用的是,您可以组合转换。

例如:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

fig, ax1 = plt.subplots(1)

# First axis, with x-values going from 0 to 100
x1 = np.linspace(0, 100, 101)
y1 = np.sin(2 * np.pi * x1 / max(x1))
ax1.plot(x1, y1, 'b.-')

# Second axis, x values going from 0 to 1
ax2 = ax1.twiny()
x2 = np.linspace(0, 1, 11)
y2 = np.cos(2 * np.pi * x2 / max(x2))
ax2.plot(x2, y2, 'r.-')

# Create a combined transform from ax2 data to ax1 data
combinedTransform = ax2.transData + ax1.transData.inverted()

def onclick(event):
    # event has x and y in data coordinates for ax2:
    pt_data2 = (event.xdata, event.ydata)

    # Convert them into data coordinates for ax1:
    pt_data1 = combinedTransform.transform(pt_data2)  
    
    # ...

cid = fig.canvas.mpl_connect('button_press_event', onclick)

感觉有一种更好的方法(以某种方式告诉事件侦听器您希望xdata和ydata对哪个轴有效,但我不知道。对不起)

票数 0
EN

Stack Overflow用户

发布于 2021-04-19 18:45:10

谢谢,我也实现了类似的东西。问题是,在我的数据背后实际上没有直接的线性转换。我解决了这个问题,只需在完成设置标记或选择点后调用函数中的第二个轴。这本书并不漂亮,但作为硕士论文应该没问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67122599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档