在matplotlib plot中得到显示的线的界限?

unguejic  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(114)

假设我有一个简单的matplotlib plot:

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 -时打印一条线,当我按下该键时,我希望打印线的 * 显示 * 段的坐标,而不管显示的是哪段(如果显示整条线,则(0,0),(1,1)将是预期的端点打印)。
当然,我希望这个方法能对任意一条线起作用,而不仅仅是(0,0),(1,1).

r3i60tvu

r3i60tvu1#

下面是一个使用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()

示例输出:x1c 0d1x

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

Matplotlib内部必须有类似的东西来计算clip on参数;然而,我没有立即在源代码中找到它。

相关问题