Я следовал за этим вопросом , но у меня возникли проблемы с его масштабированием.
после того, как я собрал свои данные, я строю длинный график со всеми акциями.
Я хочу иметь возможность выбрать график и нарисовать линию к нему.Эта строка должна быть сохранена в некоторой структуре данных (в настоящее время я просто печатаю ее).
три (основные) проблемы:
У меня действительно странные результаты ..линия, которую строит Im, рисуется на другом графике и т.д ...
Размеры графиков становятся все меньше и меньше, так как я добавляю больше их ... я хочу, чтобы они были исправлены ипросто прокрутите вниз, как я иду ...
Моя конечная цель - иметь возможность редактировать эти строки, удалять их и т. д. и сохранять их только после нажатия кнопки "Сохранить".это возможно с плт?прямым питоническим способом (== не так сложно .. :))
из того, что я читаю (виджеты) - если я могу заставить мой код работать - следующие шаги
- Мне нужно создать кнопку проверки возле каждого графика, которая будет "выбирать" соответствующую ось.
- Теперь, когда я рисую линию, я могу знать, к какой оси она принадлежит.
- а как удалить линию после прорисовки?
- можно ли создать еще одну кнопку проверки для каждой строки после ее создания?а затем выберите линию и нажмите кнопку удаления?
код - создание данных
%matplotlib qt
example_data = {}
for i in range(5):
df = pd.DataFrame(index=pd.date_range(start = "06/01/2018", end = "08/01/2018"), data = np.random.rand(62)*100)
example_data[i] = df
код - рисование линии
import matplotlib.pyplot as plt
class LineDrawer(object):
lines = []
def draw_line(self):
ax = plt.gca()
xy = plt.ginput(2)
x = [p[0] for p in xy]
y = [p[1] for p in xy]
line = plt.plot(x,y)
ax.figure.canvas.draw()
self.lines.append(line)
print xy
код - построение чертежей и рисование
fig, axs = plt.subplots(figsize=(10,15), nrows=len(example_data), ncols=1, sharex=False)
plt.subplots_adjust(wspace=0.001, hspace=0.5)
plt.tight_layout()
ld = LineDrawer()
for i, stock in enumerate(example_data):
df = example_data[stock]
axs[i].plot(df.index ,df.values)
axs[i].set_title("stock "+ `i`)
ld.draw_line() # here you click on the plot
plt.show()