我需要自动生成大约320个单独的图形。我可以成功地为一个人绘制5-18张图表。总共大约有7500多行数据。每行代表一个反转位置。在
我需要先拉,然后再画出: 1参与者(19名参与者), 2波长(波长的数目因人而异,有的只有4个,有的多达20个), 三。递增或递减(正或负条件),以及 4实验编号(1-4)。在
下面的代码使用seaborn为一个参与者显示5张图,每5个波长一张图。我有大约20名参与者(数据中按姓名首字母顺序列出)。我想写一个脚本,基本上可以为每个人和每个条件生成几个图。在
我可以按1查询或排序数据。实验,2。人,3。条件(阈值pos或neg数字)和4。波长。我还不知道如何调用或存储这些数据来绘制图形。在
例如,如果我想手动填写每个人的首字母缩写、波长、Inc/Dec(阈值)和每个实验编号,则此代码有效:
#select the desired items out of the dataframe
df[(df.Per == 'AEM') & (df.WL == 488) & (df.IncDec == 1) & (df.ExpNum == 4)]
或者这样可以排序,但我不知道如何使用它来生成每个人的图表。在
^{pr2}$我还尝试为我需要调用的每个字段编写字典,但也不知道如何在循环中使用它来调用每个项。这是一个示例,显示了我的数据帧中波长值的独特实例:
>>> dfsWL_key_names
dict_keys([428, 440, 452, 464, 476, 488, 500, 512, 524, 536, 548, 560, 572, 584, 596, 608, 620, 632, 644, 656, 668, 680])
每个图可能需要显示不同数量的数据点,例如1-??逆转。大多数情况下,反转数为12(图中为12个点),但在某些情况下,可绘制的反转位置较少,最多可绘制15个正反转位置和15个负反转位置。在每种情况下,每个人在每种波长下绘制的点数并不相同。在
逻辑是: 对于数据帧中每个唯一的人, 对于那个人的每次实验, 对于每个波长,取每个数据点,并在x轴上绘制反转数,在y轴上绘制反转位置。在
不知道如何构造几个嵌套的循环,这样我就可以获取每个人的记录,然后是唯一的波长,然后分离出增量和减量(存储为0和1),然后绘制这些数据。然后回到一个循环中,对每个波长的人重复这个步骤,对每个实验重复(4x),然后对其他参与者重复相同的步骤。在
下面的代码适用于一个参与者,要求我只将他们的数据导入到一个数据帧中,而不需要任何其他参与者、实验等。实际的数据集要大得多,并且包含每个人的数据的附加列。在
RevNum WL RevPos
0 1 440 20.934543
1 2 440 26.934543
2 3 440 20.354543
3 4 440 26.354543
4 5 440 24.714543
RevNum WL RevPos
count 120.000000 120.000000 120.000000
mean 6.500000 464.000000 7.798258
std 3.466527 17.041718 27.414977
min 1.000000 440.000000 -33.628026
25% 3.750000 452.000000 -19.736296
50% 6.500000 464.000000 9.004679
75% 9.250000 476.000000 31.219357
max 12.000000 488.000000 50.000000
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 120 entries, 0 to 119
Data columns (total 3 columns):
RevNum 120 non-null int64
WL 120 non-null int64
RevPos 120 non-null float64
dtypes: float64(1), int64(2)
memory usage: 2.9 KB
我需要使用的实际数据集更大,例如数据:
OriginalDataID Person ... ExpNumber LightIntensity
0 1611 JMA ... 1 60
1 1618 JMA ... 1 60
2 1621 JMA ... 1 60
3 1666 JMA ... 1 60
4 1669 JMA ... 1 60
[5 rows x 9 columns]
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7135 entries, 0 to 7134
Data columns (total 9 columns):
OriginalDataID 7135 non-null int64
Person 7135 non-null object
Date 7135 non-null object
Threshold0Inc 7135 non-null int64
RevNum 7135 non-null int64
Wavelength 7135 non-null int64
RevPos 7135 non-null float64
ExpNumber 7135 non-null int64
LightIntensity 7135 non-null int64
dtypes: float64(1), int64(6), object(2)
memory usage: 501.8+ KB
这将使用1个人1个实验的数据子集,为5个波长中的每一个生成一个单独的图形:
#import modules aka packages
import pandas as pd # Pandas (advanced data manipulation)
import numpy as np # Numpy (data import, manipulation, export)
import seaborn as sns # Seaborn visualization library
import matplotlib.pyplot as plt # Matplotlib (create trends)
# import data in csv file
# Old Longer Names
# df = pd.read_csv('rev_data1.csv', sep=',', delimiter=None, header='infer', names=['OriginalDataID', 'Person', 'Date', 'Threshold0Inc', 'RevNum', 'Wavelength', 'RevPos', 'ExpNumber', 'LightIntensity'],
df = pd.read_csv('rev_data10.csv', sep=',', delimiter=None, header='infer', names=['RevNum', 'WL', 'RevPos'],
index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine='python',
converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=1,
nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True,
parse_dates=False,infer_datetime_format=True, keep_date_col=False, date_parser=None, dayfirst=False,
iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None,
quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None,
error_bad_lines=True, warn_bad_lines=True, skipfooter=0, doublequote=True, delim_whitespace=False,
low_memory=True, memory_map=False, float_precision=None)
####
sns.set(style="ticks")
# Create a dataset 1
pos = df.RevPos
step = df.RevNum
walk = df.WL
# Initialize a grid of plots with an Axes for staircases for each wavelength
grid = sns.FacetGrid(df, col="WL", hue="WL", col_wrap=5, size=1.5)
# Draw a horizontal line at backgound luminance of 0
grid.map(plt.axhline, y=0, ls=":", c=".5")
# Draw a horizontal line showing min max constraints of staircase
grid.map(plt.axhline, y=-50, ls=":", c=".5")
grid.map(plt.axhline, y=50, ls=":", c=".5")
# Draw a line plot to show reversals of staircase
grid.map(plt.plot, "RevNum", "RevPos", marker="o", ms=4)
# Adjust the tick positions and labels
grid.set(xticks=np.arange(13), yticks=[-60, -40, -20, 0, 20, 40, 60],
xlim=(-.5, 12.5), ylim=(-65, 65))
# Adjust the arrangement of the plots
grid.fig.tight_layout(w_pad=1)
plt.show()
示例图:一个人的数据,1个实验,5个波长w/同时有neg和pos数据。在
目前没有回答
相关问题 更多 >
编程相关推荐