Я пытаюсь нарезать и сохранять данные (pandas .DataFrame с несколькими столбцами) на основе объектов, видимых на графике, в отдельные файлы каждый раз, когда я выбираю срез. До сих пор я использовал matplotlib SpanSelector с его функцией onselect . Тем не менее, это работает только с глобальными переменными, так как теперь, кажется, есть простой способ передать DataFrame в функцию. Есть ли какое-либо решение, чтобы избежать объявления глобальной переменной каждый раз?
Сам DataFrame происходит из программы, которая считывает входной файл в DataFrame.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import SpanSelector
def get_data():
# example of DataFrame, real Data will come from input-files
x = np.arange(100,step=0.2)
y = np.sin(x)
y2 = np.cos(x)
data = pd.DataFrame(np.array((y,y2)).transpose(), index=x, columns=["a","b"])
return data
def cut_data(data_frame):
# use a single plot or as many subplots as there are columns in dataframe if more than one
if data_frame.shape[1] == 1:
fig, ax = plt.subplots(data_frame.shape[1], 1, sharex=True)
ax.plot(data_frame)
span = SpanSelector(ax, onselect, 'horizontal', useblit=True,
rectprops=dict(alpha=0.35, facecolor='red'), span_stays=True)
else:
fig, axlst = plt.subplots(data_frame.shape[1], 1, sharex=True)
for n, col in enumerate(data_frame):
axlst[n].plot(data_frame[col])
span = SpanSelector(axlst[0], onselect, 'horizontal', useblit=True,
rectprops=dict(alpha=0.35, facecolor='red'), span_stays=True)
plt.show()
def onselect(xmin, xmax):
pass
# get indices of x-values each time a subset of the data is selected
# slice every column in DataFrame and save to file as new DataFrame
cut_data(get_data())