Seaborn Facetgrid позволяет мне создавать несколько графиков для одного человека. Однако я не могу изменить код для прохождения цикла, чтобы повторить один и тот же процесс для 20 разных людей.
Это прерывается, когда я пытаюсь вызвать каждый другой человек. Проблема заключается в том, что я вызываю строку с именем фрейма данных, а не сам фрейм данных. Как мне это исправить?
Я начал с одного очень большого фрейма данных, я создал отдельные фреймы данных для каждого человека из этого более крупного фрейма данных. Когда я пытаюсь выполнить цикл по каждому из фреймов данных отдельных людей, я не могу вызвать сам фрейм данных.
Это похоже на строки с вопросами:
for i in Person_u:
output_file=(i + '.png')
input_file=(i + '.csv')
title=i
db=('df_' + i)
Ниже я включил и код, и код, который работает для 1 человека, и код, который не работает для прохождения через несколько человек.
# import libraries ...
# import data from csv file ...
#create data frame from values in the csv file
df = pd.read_csv(input_file, sep=',', delimiter=None, header='infer',
names=['LH', 'RevID', 'OrigID', 'Person', 'Date', 'File',
'Threshold', 'StepSize', 'RevNum', 'WL', 'RevPos', 'ExpNum', 'Light', 'ThExp'],
usecols=['OrigID', 'Person', 'Date', 'Threshold', 'RevNum', 'WL', 'RevPos', 'ExpNum', 'ThExp'],
engine='python', skiprows=1, infer_datetime_format=True)
# By Experiment
# Experiment 1, 2, 3, 4 (hundreds of rows, etc.)
df_TLR_1 = df.loc[(df.Person == 'TLR') & (df.ExpNum == 1)]
df_KJE_1 = df.loc[(df.Person == 'KJE') & (df.ExpNum == 1)]
df_NMP_2 = df.loc[(df.Person == 'NMP') & (df.ExpNum == 2)]
df_SFO_2 = df.loc[(df.Person == 'SFO') & (df.ExpNum == 2)]
df_MTC_3 = df.loc[(df.Person == 'MTC') & (df.ExpNum == 3)]
df_ZBL_3 = df.loc[(df.Person == 'ZBL') & (df.ExpNum == 3)]
df_MTC_4 = df.loc[(df.Person == 'MTC') & (df.ExpNum == 4)]
df_TLR_1 = df.loc[(df.Person == 'RJI') & (df.ExpNum == 4)]
Person_u = df.Person.unique()
ExpNum_u = df.ExpNum.unique()
WL_u = df.WL.unique()
ThExp_u = df.ThExp.unique()
# seaborn set stylesns.set(style="ticks")
grid = sns.FacetGrid(df_TLR_1, col="WL", hue="ThExp", col_wrap=4, size=4)
grid.map(plt.axhline, y=0, ls=":", c=".5")
# Draw a horizontal line showing min max constraints of staircase
if df_TLR_1.iloc[0,7] == 1:
grid.map(plt.axhline, y=-60, ls=":", c=".5")
grid.map(plt.axhline, y=40, ls=":", c=".5")
grid.map(plt.plot, "RevNum", "RevPos", marker="o", ms=4)
grid.set(xticks=np.arange(13), yticks=[-65, -60, -40, -20, 0, 20, 40, 45], xlim=(-.5, 12.5), ylim=(-65, 45))
elif df_TLR_1.iloc[0,7] == 4:
grid.map(plt.axhline, y=-50, ls=":", c=".5")
grid.map(plt.axhline, y=50, ls=":", c=".5")
grid.map(plt.plot, "RevNum", "RevPos", marker="o", ms=4)
grid.set(xticks=np.arange(13), yticks=[-60, -40, -20, 0, 20, 40, 60], xlim=(-.5, 12.5), ylim=(-65, 65))
else:
print('Error. Experiment Number not 1-4.')
# Draw a line plot to show reversals of staircase
# Adjust the arrangement of the plots
grid.fig.tight_layout(w_pad=.5)
this_name=df_TLR_1.iloc[0,1]
th_experiment=df_TLR_1.iloc[0,8]
this_experiment=th_experiment[-4:8]
#plt.suptitle(df_TLR_1.iloc[0,1] + df_TLR_1.iloc[0,8], fontsize=20)
plt.suptitle(this_name + ' ' + this_experiment, fontsize=20, ha='right')
plt.savefig(this_name + ' ' + this_experiment + '.png')
plt.show()
Когда я пытаюсь изменить его так, чтобы он проходил через каждого уникального человека, я не могу добавить три буквы и номер эксперимента к df_XXX_X.
Например, изменив df_RJI_1 на df_MTC_3 и т. Д.
for i in Person_u:
output_file=(i + '.png')
input_file=(i + '.csv')
title=i
db=('df_' + i)
#seaborn set style
sns.set(style="ticks")
grid = sns.FacetGrid(db, col="WL", hue="ThExp", col_wrap=5, size=4)
grid.map(plt.axhline, y=0, ls=":", c=".5")
# Draw a horizontal line showing min max constraints of staircase
if db[0,7] == 1:
grid.map(plt.axhline, y=-40, ls=":", c=".5")
grid.map(plt.axhline, y=60, ls=":", c=".5")
elif db[0,7] == 4:
grid.map(plt.axhline, y=-50, ls=":", c=".5")
grid.map(plt.axhline, y=50, ls=":", c=".5")
else:
print('Error. Experiment Number not 1-4.')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-2b9785282fe1> in <module>()
6 #seaborn set style
7 sns.set(style="ticks")
----> 8 grid = sns.FacetGrid(db, col="WL", hue="ThExp", col_wrap=5, size=4)
9 grid.map(plt.axhline, y=0, ls=":", c=".5")
10 # Draw a horizontal line showing min max constraints of staircase
c:\users\rijekah\appdata\local\programs\python\python35\lib\site-packages\seaborn\axisgrid.py in __init__(self, data, row, col, hue, col_wrap, sharex, sharey, size, aspect, palette, row_order, col_order, hue_order, hue_kws, dropna, legend_out, despine, margin_titles, xlim, ylim, subplot_kws, gridspec_kws)
235 hue_names = None
236 else:
--> 237 hue_names = utils.categorical_order(data[hue], hue_order)
238
239 colors = self._get_palette(data, hue, hue_order, palette)
TypeError: string indices must be integers
Это пример графика, когда он работает:
# seaborn set stylesns.set(style="ticks")
grid = sns.FacetGrid(df_TLR_1, col="WL", hue="ThExp", col_wrap=3, size=6)
grid.map(plt.axhline, y=0, ls=":", c=".5")
# Draw a horizontal line showing min max constraints of staircase
if df_TLR_1.iloc[0,7] == 1:
grid.map(plt.axhline, y=-60, ls=":", c=".5")
grid.map(plt.axhline, y=40, ls=":", c=".5")
grid.map(plt.plot, "RevNum", "RevPos", marker="o", ms=4)
grid.set(xticks=np.arange(13), yticks=[-65, -60, -40, -20, 0, 20, 40, 45], xlim=(-.5, 15.5), ylim=(-65, 45))
elif df_TLR_1.iloc[0,7] == 4:
grid.map(plt.axhline, y=-50, ls=":", c=".5")
grid.map(plt.axhline, y=50, ls=":", c=".5")
grid.map(plt.plot, "RevNum", "RevPos", marker="o", ms=4)
grid.set(xticks=np.arange(13), yticks=[-60, -40, -20, 0, 20, 40, 60], xlim=(-.5, 12.5), ylim=(-65, 65))
else:
print('Error. Experiment Number not 1-4.')
# Adjust the arrangement of the plots
grid.fig.tight_layout(w_pad=.5)
this_name=df_TLR_1.iloc[0,1]
th_experiment=df_TLR_1.iloc[0,9]
this_experiment=th_experiment[-4:8]
# add figure title and save figure
plt.suptitle(this_name + ' ' + this_experiment, fontsize=20, ha='right')
plt.savefig(this_name + ' ' + this_experiment + '.png')