correction for sfs transform plot

master
tforest 2022-07-08 14:15:41 +02:00
parent a8b5c1aa6f
commit a92dba2d25
2 changed files with 15 additions and 11 deletions

View File

@ -202,10 +202,13 @@ def scatter(x, y, ylab=None, xlab=None, title=None):
def barplot(x=None, y=None, ylab=None, xlab=None, title=None): def barplot(x=None, y=None, ylab=None, xlab=None, title=None):
if x: if x:
x = list(x)
plt.xticks(x)
plt.bar(x, y) plt.bar(x, y)
else: else:
x = list(range(len(y))) x = list(range(len(y)))
plt.bar(x, y) plt.bar(x, y)
plt.xticks(x)
if ylab: if ylab:
plt.ylabel(ylab) plt.ylabel(ylab)
if xlab: if xlab:

View File

@ -20,6 +20,7 @@ Rectify SFS comp in parsed funct.
import gzip import gzip
import sys import sys
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from frst import customgraphics
def sfs_from_vcf(n, vcf_file, folded = True, diploid = True, phased = False, verbose = False, def sfs_from_vcf(n, vcf_file, folded = True, diploid = True, phased = False, verbose = False,
strip = False, count_ext = False): strip = False, count_ext = False):
@ -194,8 +195,9 @@ def sfs_from_parsed_vcf(n, vcf_dict, folded = True, diploid = True, phased = Fal
def barplot_sfs(sfs, xlab, ylab, folded=True, title = "Barplot", transformed = False): def barplot_sfs(sfs, xlab, ylab, folded=True, title = "Barplot", transformed = False):
sfs_val = [] sfs_val = []
n = len(sfs.values()) n = len(sfs.values())
for k in range(1, n): print("n =", n)
ksi = list(sfs.values())[k-1] for k, ksi in sfs.items():
#ksi = list(sfs.values())[k-1]
# k+1 because k starts from 0 # k+1 because k starts from 0
# if folded: # if folded:
# # ?check if 2*n or not? # # ?check if 2*n or not?
@ -207,7 +209,8 @@ def barplot_sfs(sfs, xlab, ylab, folded=True, title = "Barplot", transformed =
# sfs_val.append(ksi) # sfs_val.append(ksi)
if transformed: if transformed:
if folded: if folded:
sfs_val.append(ksi * k * (2*n - k)) #sfs_val.append(ksi * k * (2*n - k))
sfs_val.append(((k*(2*n - k)) / (2*n))*ksi)
else: else:
sfs_val.append(ksi * k) sfs_val.append(ksi * k)
else: else:
@ -215,17 +218,15 @@ def barplot_sfs(sfs, xlab, ylab, folded=True, title = "Barplot", transformed =
#terminal case, same for folded or unfolded #terminal case, same for folded or unfolded
if transformed: if transformed:
sfs_val.append(list(sfs.values())[n-1] * n) sfs_val[-1] = list(sfs.values())[n-1] * n
else: else:
sfs_val.append(list(sfs.values())[n-1]) sfs_val[-1] = list(sfs.values())[n-1]
#build the plot #build the plot
title = title+" [folded="+str(folded)+"]"+" [transformed="+str(transformed)+"]" title = title+" [folded="+str(folded)+"]"+" [transformed="+str(transformed)+"]"
if ylab: print("SFS =", sfs)
plt.ylabel(ylab) if transformed:
if xlab: print("Transformed SFS ( n =",len(sfs_val), ") :", sfs_val)
plt.xlabel(xlab) customgraphics.barplot(x = sfs.keys(), y= sfs_val, xlab = xlab, ylab = ylab, title = title)
plt.title(title)
plt.bar([i+1 for i in sfs.keys()], sfs_val)
plt.show() plt.show()
if __name__ == "__main__": if __name__ == "__main__":