我正在尝试使用Matplotlib显示带有一些小部件的绘图。这些小部件应只允许用户输入拟合的起点和终点。下面的代码有效,但是,当我单击小部件以输入数据时,它会从主图中窃取焦点,这意味着缩放,平移等工具在该图中不再起作用。此外,发生这种情况时,左下角显示的坐标将成为小部件内部的 ,这意味着它们在悬停绘图时消失,而在悬停小部件时重新出现。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import TextBox
class fit_parameter :
val = 0
def __init__(self, start_value):
self.val = start_value
def change(self, new_value):
self.val = float(new_value)
def fit_to_zero(x_axis, y_axis, color, y_label) :
plt.clf()
plt.semilogx(x_axis, y_axis, linewidth=0.5, marker="o", markersize=1, color=color)
plt.xlabel(r'$y \,\, [keV \, / \, \mu m]$')
plt.ylabel(y_label)
plt.title("Linear interval selection")
print("Write the start and end point of the linear interval")
fit_start, fit_end = fit_parameter(0.1), fit_parameter(0.4)
axbox1 = plt.axes([0.65, 0.82, 0.2, 0.04])
text_box1 = TextBox(axbox1, 'start ', initial="0.1")
text_box1.on_submit(fit_start.change)
axbox2 = plt.axes([0.65, 0.76, 0.2, 0.04])
text_box2 = TextBox(axbox2, 'end ', initial="0.4")
text_box2.on_submit(fit_end.change)
plt.show()
#...
这是问题的图片:
我已经使用Pyhton 3在Windows 10和Ubuntu 18.04上对此进行了测试。