我正在制作Snake,并在python中使用seaborn。我已经到了管道中的一个点,snakemake给出了丢失的输出。
snakemake的伪代码看起来有点像这样:
WC1 = Wildcard1
WC2 = Wildcard2
rule all:
expand("/path/to/outputs{wc1}_{wc2}.png", wc1=WC1, wc2=WC2)
checkpoint seaborn:
input:
"/OtherPath/to/file1.csv"
"/AnotherPath/to/file2.tsv"
output:
"/path/to/outputs{wc1}_{wc2}.png"
shell:
"python SeabornPlot.py"
python脚本,有点像伪代码,应该是这样的:
import matplotlib.pyplot as plt
import seaborn as sns
CSV1 = pd.read_csv(snakemake.input[O], delimiter=",")
CSV2 = pd.read_csv(snakemake.input[1], delimiter=",")
for column in CSV1:
g = sns.barplot(x=column, data=CSV2)
fig = g.get_figure()
fig.savefig(snakemake.output[0])
plt.clf()
这不起作用。python脚本在snakemake之外工作(使用正确的文件路径和名称(。我怀疑这与使用";输出[0]";,但是我可以用什么代替呢?
我确信这里的检查点是正确的,而不是规则。但如果我错了,请纠正我。
最后,我知道规则中缺少了一些东西。我可能应该为每个绘图添加一个带有新通配符的函数。
但我遇到的主要问题是让python将绘图输出到正确的路径。
提前感谢!
Snakefile中的明显错误是规则all。它应该有一个输入。
rule all:
input: expand("/path/to/outputs{wc1}_{wc2}.png", wc1=WC1, wc2=WC2)
all
这个名字没有什么特别之处。如果您没有指定规则或输出文件,snakemake只需使用第一条规则作为目标。按照惯例(从原始的make
程序继承而来(,第一个规则称为all
,它只有依赖项(也称为input:
(。它通常没有自己的输出或动作(例如:script:
(。