获取 matplotlib 图中显示的线条限制?

问题描述 投票:0回答:1

假设我有这个简单的 matplotlib 图:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
x_data = [0, 1.0]
y_data = [0, 1.0]
myline = ax.plot(x_data, y_data)

def on_keypress(event):
  if event.key == 'ctrl+p':
    print("Printing myline: {}".format(myline))

fig.canvas.mpl_connect('key_press_event', on_keypress)

plt.show()

比如说,我运行这个,然后我做了一个“缩放到矩形”:

...因此,我显示了这个缩放区域:

如何找到所示线段的端点坐标?

在示例代码中,当我按 CTRL+p 时,会打印一行 - 当我按下该键时,我希望打印该行的 shown 段的坐标,无论是哪个段显示(如果显示整条线,则 (0,0), (1,1) 将是预期打印的端点)。

我怎样才能做到这一点?当然,我希望该方法适用于任意线,而不仅仅是 (0,0)、(1,1) 线......

python matplotlib event-handling
1个回答
1
投票

这是一种使用 shapely 的方法:

from shapely.geometry import LineString, box
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
x_data = [0.7, 1.0]
y_data = [2.1, 3.4]
myline, = ax.plot(x_data, y_data)

def on_keypress(event):
  if event.key == 'ctrl+p':
    viewlim = ax.viewLim   
    linestr = LineString(myline.get_xydata())
    viewbox = box(viewlim.x0, viewlim.y0, viewlim.x1, viewlim.y1)    
    inters = viewbox.intersection(linestr)
    coords = np.asarray(inters.coords)
    print(coords)

fig.canvas.mpl_connect('key_press_event', on_keypress)

plt.show()

输出示例:

>>>[[0.79071429 2.49309524]
>>>[1.         3.4       ]]

Matplotlib 内部必须有类似的东西来计算

clip on
参数;但是,我并没有立即在源代码中找到它。

© www.soinside.com 2019 - 2024. All rights reserved.