假设我有这个简单的 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) 线......
这是一种使用 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
参数;但是,我并没有立即在源代码中找到它。