本文章主要是在实验Flowjo后觉得可以批量化处理fcs文件,故在搜索github文件中找到该python包并进行简单学习和使用:
Flowkit文件包相关链接
安装需要要求:
python版本至少大于3.8
- flowio >= 1.3.0
- flowutils >= 1.1.0
- anytree >= 2.9
- bokeh >= 3.1
- contourpy >= 1.1.0
- lxml >= 4.9
- networkx >= 3.1
- numpy >= 1.22, <2
- pandas >= 2.0
- psutils >= 5.8
- scipy >= 1.8
代码示例
识别文件及内容
import flowkit as fk
import bokeh
from bokeh.plotting import show
sample = fk.Sample(fcs_path)
df_events = sample.as_dataframe(source='raw')
print(sample)
print(df_events.head())
结果显示
Sample(v3.1, Specimen_001_H9_H09_093.fcs, 16 channels, 10000 events)
pnn FSC-A FSC-H FSC-W ... PE-H PE-W Time
pns ...
0 10373.473633 9393.637695 98685.539062 ... 53.390919 83.006859 0.000121
1 9572.993164 8753.242188 98193.484375 ... 52.647331 196.963196 0.000381
2 10218.270508 9248.255859 97139.242188 ... 71.161530 440.051788 0.000989
3 4514.647949 4506.229492 72589.648438 ... 35.043289 143.153198 0.001174
4 4611.023926 4548.003418 74355.070312 ... 36.149872 237.711670 0.001450
sample展示文件名称、通道有多少,具有多少个event
而接下来展示的是文件中每个event的通道。
如果想要获得某一通道的各个event的数值,可以如下操作:
sample.get_events(source='raw')
channel_idx = sample.get_channel_index('FSC-H')
sample_channel = sample.get_channel_events(channel_idx, source='raw')
print(sample_channel)
结果输出如下:
[ 9393.63769531 8753.2421875 9248.25585938 ... 9208.12695312
9048.46972656 10001.78515625]
以上展示的是获得FSC-H通道每个event的具体数值。
另,如果想要获得具体文件中有哪些通道名称,可使用如下命令:
print(sample.channels)
结果如下:
channel_number pnn pns png pne pnr
0 1 FSC-A 1.00 (0.0, 0.0) 262144.0
1 2 FSC-H 1.00 (0.0, 0.0) 262144.0
2 3 FSC-W 1.00 (0.0, 0.0) 262144.0
3 4 SSC-A 1.00 (0.0, 0.0) 262144.0
4 5 SSC-H 1.00 (0.0, 0.0) 262144.0
5 6 SSC-W 1.00 (0.0, 0.0) 262144.0
6 7 FITC-A 1.00 (0.0, 0.0) 262144.0
7 8 FITC-H 1.00 (0.0, 0.0) 262144.0
8 9 FITC-W 1.00 (0.0, 0.0) 262144.0
9 10 PE-Texas Red-A 1.00 (0.0, 0.0) 262144.0
10 11 PE-Texas Red-H 1.00 (0.0, 0.0) 262144.0
11 12 PE-Texas Red-W 1.00 (0.0, 0.0) 262144.0
12 13 PE-A 1.00 (0.0, 0.0) 262144.0
13 14 PE-H 1.00 (0.0, 0.0) 262144.0
14 15 PE-W 1.00 (0.0, 0.0) 262144.0
15 16 Time 0.01 (0.0, 0.0) 262144.0
展示直方图等绘图:
p = sample.plot_histogram('FITC-A', source='raw')
show(p)
结果显示:
#show contour plot(具有坐标范围的等高线图)
x_min = y_min = 50
x_max = y_max = 100000
p = sample.plot_contour(
2, 7, source='raw', x_min=x_min, x_max=x_max, y_min=y_min, y_max=y_max
)
show(p)
#全部event的等高线图
p = sample.plot_contour(2, 7, source='raw', plot_events=True)
show(p)
#在等高线本身加上event的散点图
p = sample.plot_contour(2, 7, source='raw', plot_events=True)
show(p)
以上为等高线图作图及比较
坐标轴及其他数值转换方法
如果想要将图片尺度转为对数坐标轴,操作如下:
logicle_xform = fk.transforms.LogicleTransform(
'logicle',
param_t=262144,
param_w=0.5,
param_m=4.5,
param_a=0
)
sample.apply_transform(logicle_xform)
p = sample.plot_histogram(6, source='xform')
show(p)
此外,还有其他转换操作方法,具体不在此处展示,原github文库中有具体展示:
门的选区和使用
此处的门指的是fcs中选择的特定选取内的event,如下图所示:
框中选取作为亚种群,可进行各种操作,由于本人实验中不怎么需要对样品分类分析等,故框选全部或者对全部event进行数据统计具有同样效果:
(待更新)