'How to draw a vertical line with double left click while using blitting in matplotlib?
I'm trying to write a program which would let user to create vertical line on the chart in the place of double left click. Actually I already can write this kind of program but now I need to add blitting to it. So I wrote below code and it doesn't work. Can someone tell me how to fix this?
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot()
plt.pause(0.1)
bg = fig.canvas.copy_from_bbox(fig.bbox)
fig.canvas.blit(fig.bbox)
def dbl_lmb_to_create_a_line(event):
if event.button == plt.MouseButton.LEFT and event.dblclick == True:
line = ax.axvline(event.xdata)
ax.draw_artist(line)
dbl_lmb_to_create_a_line_connector = fig.canvas.mpl_connect("button_press_event", dbl_lmb_to_create_a_line)
while True:
fig.canvas.restore_region(bg)
fig.canvas.blit(fig.bbox)
fig.canvas.flush_events()
Solution 1:[1]
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot()
plt.pause(0.1)
bg = fig.canvas.copy_from_bbox(fig.bbox)
fig.canvas.blit(fig.bbox)
def dbl_lmb_to_create_a_line(event):
if event.button == plt.MouseButton.LEFT and event.dblclick:
line = ax.axvline(event.xdata)
ax.draw_artist(line)
plt.show()
dbl_lmb_to_create_a_line_connector = fig.canvas.mpl_connect("button_press_event", dbl_lmb_to_create_a_line)
while True:
fig.canvas.restore_region(bg)
fig.canvas.blit(fig.bbox)
fig.canvas.flush_events()
Adding plt.show() at the end of the function will do
Solution 2:[2]
I found solution - adding a for-loop which draws all lines added to canvas is the thing.
while True:
fig.canvas.restore_region(bg)
for i in range(0,len(ax.get_lines())):
ax.draw_artist(ax.get_lines()[i])
fig.canvas.blit(fig.bbox)
fig.canvas.flush_events()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Marcel Dr?g |
