comparison mirgene_graphs.py @ 17:0cdc0c3c821e draft

Uploaded
author glogobyte
date Wed, 20 Oct 2021 08:44:20 +0000
parents d58f050acd18
children 01679b6e886a
comparison
equal deleted inserted replaced
16:fa48ad87ae3e 17:0cdc0c3c821e
79 t_templ+=1 79 t_templ+=1
80 t_tem_counts += x[2] 80 t_tem_counts += x[2]
81 81
82 fig = plt.figure(figsize=(7,5)) 82 fig = plt.figure(figsize=(7,5))
83 83
84 labels = 'miRNA RefSeq','Template', 'Unassigned' ,'Non-template' 84 labels = 'miRNA RefSeq','templated', 'unassigned' ,'non-templated'
85 sizes = [c_mat_counts, c_tem_counts, c_unmap_counts,c_non_counts] 85 sizes = [c_mat_counts, c_tem_counts, c_unmap_counts,c_non_counts]
86 colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue'] 86 colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
87 # Plot 87 # Plot
88 ax1 = plt.subplot2grid((1,2),(0,0)) 88 ax1 = plt.subplot2grid((1,2),(0,0))
89 patches, texts, autotexts=plt.pie(sizes, labels=labels, colors=colors, startangle=140,autopct='%1.1f%%',radius=0.8) 89 patches, texts, autotexts=plt.pie(sizes, labels=labels, colors=colors, startangle=140,autopct='%1.1f%%',radius=0.8)
90 [x.set_fontsize(8) for x in texts] 90 [x.set_fontsize(10) for x in texts]
91 plt.title(group_name1 + ' Group (reads)',fontsize=12) 91 plt.title(group_name1.capitalize() + ' group (reads)',fontsize=12)
92 92
93 labels = 'miRNA RefSeq','Template', 'Unassigned','non-template' 93 labels = 'miRNA RefSeq','templated', 'unassigned','non-templated'
94 sizes = [t_mat_counts, t_tem_counts, t_unmap_counts, t_non_counts] 94 sizes = [t_mat_counts, t_tem_counts, t_unmap_counts, t_non_counts]
95 colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue'] 95 colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
96 # Plot 96 # Plot
97 ax2 = plt.subplot2grid((1,2),(0,1)) 97 ax2 = plt.subplot2grid((1,2),(0,1))
98 patches, texts, autotexts=plt.pie(sizes, labels=labels, colors=colors, startangle=140,autopct='%1.1f%%',radius=0.8) 98 patches, texts, autotexts=plt.pie(sizes, labels=labels, colors=colors, startangle=140,autopct='%1.1f%%',radius=0.8)
99 [x.set_fontsize(8) for x in texts] 99 [x.set_fontsize(10) for x in texts]
100 plt.title(group_name2 + ' Group (reads)', fontsize=12) 100 plt.title(group_name2.capitalize() + ' group (reads)', fontsize=12)
101 plt.savefig('pie_non.png',dpi=300) 101 plt.savefig('pie_non.png',dpi=300)
102 102
103 #################################################################################################################################################################################################################### 103 ####################################################################################################################################################################################################################
104 104
105 def pie_temp(merge_con,c_unmap,c_unmap_counts,merge_tre,t_unmap,t_unmap_counts,group_name1,group_name2): 105 def pie_temp(merge_con,c_unmap,c_unmap_counts,merge_tre,t_unmap,t_unmap_counts,group_name1,group_name2):
158 t_templ+=1 158 t_templ+=1
159 t_tem_counts += x[2] 159 t_tem_counts += x[2]
160 160
161 161
162 fig = plt.figure() 162 fig = plt.figure()
163 labels = 'miRNA RefSeq','Template', 'Unassigned' 163 labels = 'miRNA RefSeq','templated', 'unassigned'
164 sizes = [c_mat_counts, c_tem_counts, c_unmap_counts] 164 sizes = [c_mat_counts, c_tem_counts, c_unmap_counts]
165 colors = ['gold', 'yellowgreen', 'lightskyblue'] 165 colors = ['gold', 'yellowgreen', 'lightskyblue']
166 explode = (0.2, 0.05, 0.1) 166 explode = (0.2, 0.05, 0.1)
167 # Plot 167 # Plot
168 ax1 = plt.subplot2grid((1,2),(0,0)) 168 ax1 = plt.subplot2grid((1,2),(0,0))
169 patches, texts, autotexts=plt.pie(sizes, labels=labels, colors=colors, startangle=140,autopct='%1.1f%%',radius=0.8) 169 patches, texts, autotexts=plt.pie(sizes, labels=labels, colors=colors, startangle=140,autopct='%1.1f%%',radius=0.8)
170 [x.set_fontsize(8) for x in texts] 170 [x.set_fontsize(10) for x in texts]
171 plt.title(group_name1 + ' group (reads)', fontsize=12) 171 plt.title(group_name1.capitalize() + ' group (reads)', fontsize=12)
172 labels = 'miRNA RefSeq','Template', 'Unassigned' 172 labels = 'miRNA RefSeq','templated', 'Unassigned'
173 sizes = [t_mat_counts, t_tem_counts, t_unmap_counts] 173 sizes = [t_mat_counts, t_tem_counts, t_unmap_counts]
174 colors = ['gold', 'yellowgreen', 'lightskyblue'] 174 colors = ['gold', 'yellowgreen', 'lightskyblue']
175 explode = (0.2, 0.05, 0.1) 175 explode = (0.2, 0.05, 0.1)
176 # Plot 176 # Plot
177 ax2 = plt.subplot2grid((1,2),(0,1)) 177 ax2 = plt.subplot2grid((1,2),(0,1))
178 patches, texts, autotexts=plt.pie(sizes, labels=labels, colors=colors, startangle=140,autopct='%1.1f%%',radius=0.8) 178 patches, texts, autotexts=plt.pie(sizes, labels=labels, colors=colors, startangle=140,autopct='%1.1f%%',radius=0.8)
179 [x.set_fontsize(8) for x in texts] 179 [x.set_fontsize(10) for x in texts]
180 plt.title(group_name2 + ' group (reads)',fontsize = 12) 180 plt.title(group_name2.capitalize() + ' group (reads)',fontsize = 12)
181 plt.savefig('pie_tem.png',dpi=300) 181 plt.savefig('pie_tem.png',dpi=300)
182 182
183 ################################################################################################################################################################################################################### 183 ###################################################################################################################################################################################################################
184 184
185 def make_spider(merge_con,merge_tre,group_name1,group_name2): 185 def make_spider(merge_con,merge_tre,group_name1,group_name2):
334 334
335 radar_max = max(c_5, c_3, c_both,c_mature,c_exception,t_5,t_3,t_both,t_mature,t_exception) 335 radar_max = max(c_5, c_3, c_both,c_mature,c_exception,t_5,t_3,t_both,t_mature,t_exception)
336 radar_max_counts = max(c_5_counts,c_3_counts,c_both_counts,c_mat_counts,c_exception_counts,t_5_counts,t_3_counts,t_both_counts,t_mat_counts,t_exception_counts) 336 radar_max_counts = max(c_5_counts,c_3_counts,c_both_counts,c_mat_counts,c_exception_counts,t_5_counts,t_3_counts,t_both_counts,t_mat_counts,t_exception_counts)
337 337
338 df=pd.DataFrame({ 338 df=pd.DataFrame({
339 'group':[group_name1,group_name2], 339 'group':[group_name1.capitalize(),group_name2.capitalize()],
340 """5'3'-isomiRs""":[c_both,t_both], 340 """5'3'-isomiRs""":[c_both,t_both],
341 """3'-isomiRs""":[c_3,t_3], 341 """3'-isomiRs""":[c_3,t_3],
342 'RefSeq miRNA':[c_mature,t_mature], 342 'RefSeq miRNA':[c_mature,t_mature],
343 """5'-isomiRs""":[c_5,t_5], 343 """5'-isomiRs""":[c_5,t_5],
344 'Others*':[c_exception,t_exception]}) 344 'others*':[c_exception,t_exception]})
345 345
346 df1=pd.DataFrame({ 346 df1=pd.DataFrame({
347 'group':[group_name1,group_name2], 347 'group':[group_name1.capitalize(),group_name2.capitalize()],
348 """5'-3'-isomiRs""":[c_both_counts,t_both_counts], 348 """5'-3'-isomiRs""":[c_both_counts,t_both_counts],
349 """3'-isomiRs""":[c_3_counts,t_3_counts], 349 """3'-isomiRs""":[c_3_counts,t_3_counts],
350 'RefSeq miRNA':[c_mat_counts,t_mat_counts], 350 'RefSeq miRNA':[c_mat_counts,t_mat_counts],
351 """5'-isomiRs""":[c_5_counts,t_5_counts], 351 """5'-isomiRs""":[c_5_counts,t_5_counts],
352 'Others*':[c_exception_counts,t_exception_counts]}) 352 'others*':[c_exception_counts,t_exception_counts]})
353 353
354 spider_last(df,radar_max,1,group_name1,group_name2) 354 spider_last(df,radar_max,1,group_name1,group_name2)
355 spider_last(df1,radar_max_counts,2,group_name1,group_name2) 355 spider_last(df1,radar_max_counts,2,group_name1,group_name2)
356 356
357 357
374 # If you want the first axis to be on top: 374 # If you want the first axis to be on top:
375 ax.set_theta_offset(pi/2) 375 ax.set_theta_offset(pi/2)
376 ax.set_theta_direction(-1) 376 ax.set_theta_direction(-1)
377 377
378 # Draw one axe per variable + add labels labels yet 378 # Draw one axe per variable + add labels labels yet
379 plt.xticks(angles[:-1], categories, fontsize=11) 379 plt.xticks(angles[:-1], categories, fontsize=13)
380 380
381 # Draw ylabels 381 # Draw ylabels
382 radar_max=round(radar_max+radar_max*0.1) 382 radar_max=round(radar_max+radar_max*0.1)
383 mul=len(str(radar_max))-1 383 mul=len(str(radar_max))-1
384 maxi=int(math.ceil(radar_max / pow(10,mul))) * pow(10,mul) 384 maxi=int(math.ceil(radar_max / pow(10,mul))) * pow(10,mul)
385 sep = round(maxi/4) 385 sep = round(maxi/4)
386 plt.yticks([sep, 2*sep, 3*sep, 4*sep, 5*sep], [str(sep)+'%', str(2*sep)+'%', str(3*sep)+'%', str(4*sep)+'%', str(5*sep)+'%'], color="grey", size=10) 386 plt.yticks([sep, 2*sep, 3*sep, 4*sep, 5*sep], [str(sep)+'%', str(2*sep)+'%', str(3*sep)+'%', str(4*sep)+'%', str(5*sep)+'%'], color="grey", size=12)
387 plt.ylim(0, maxi) 387 plt.ylim(0, maxi)
388 388
389 # ------- PART 2: Add plots 389 # ------- PART 2: Add plots
390 390
391 # Plot each individual = each line of the data 391 # Plot each individual = each line of the data
392 # I don't do a loop, because plotting more than 3 groups makes the chart unreadable 392 # I don't do a loop, because plotting more than 3 groups makes the chart unreadable
393 393
394 # Ind1 394 # Ind1
395 values=df.loc[0].drop('group').values.flatten().tolist() 395 values=df.loc[0].drop('group').values.flatten().tolist()
396 values += values[:1] 396 values += values[:1]
397 ax.plot(angles, values,'-o', linewidth=1, linestyle='solid', label=group_name1) 397 ax.plot(angles, values,'-o', linewidth=1, linestyle='solid', label=group_name1.capitalize())
398 ax.fill(angles, values, 'b', alpha=0.1) 398 ax.fill(angles, values, 'b', alpha=0.1)
399 399
400 # Ind2 400 # Ind2
401 values=df.loc[1].drop('group').values.flatten().tolist() 401 values=df.loc[1].drop('group').values.flatten().tolist()
402 values += values[:1] 402 values += values[:1]
403 ax.plot(angles, values, '-o' ,linewidth=1, linestyle='solid', label=group_name2) 403 ax.plot(angles, values, '-o' ,linewidth=1, linestyle='solid', label=group_name2.capitalize())
404 ax.fill(angles, values, 'r', alpha=0.1) 404 ax.fill(angles, values, 'r', alpha=0.1)
405 405
406 # Add legend 406 # Add legend
407 if flag==1: 407 if flag==1:
408 plt.legend(loc='upper right', bbox_to_anchor=(0.0, 0.1)) 408 plt.legend(loc='upper right', prop={'size': 11}, bbox_to_anchor=(0.0, 0.1))
409 plt.savefig('spider_non_red.png',dpi=300) 409 plt.savefig('spider_non_red.png',dpi=300)
410 else: 410 else:
411 plt.legend(loc='upper right', bbox_to_anchor=(0.0, 0.1)) 411 plt.legend(loc='upper right', prop={'size': 11}, bbox_to_anchor=(0.0, 0.1))
412 plt.savefig('spider_red.png',dpi=300) 412 plt.savefig('spider_red.png',dpi=300)
413 413
414 ############################################################################################################################################################################################################# 414 #############################################################################################################################################################################################################
415 415
416 def hist_red(samples,flag,group): 416 def hist_red(samples,flag,group):
419 cat=[] 419 cat=[]
420 total_reads=0 420 total_reads=0
421 seq=[] 421 seq=[]
422 422
423 if flag == "c": 423 if flag == "c":
424 title = "Length Distribution of "+group+" group (Redudant reads)" 424 title = "Length distribution of "+group.lower()+" group (redundant reads)"
425 if flag == "t": 425 if flag == "t":
426 title = "Length Distribution of "+group+" group (Redudant reads)" 426 title = "Length distribution of "+group.lower()+" group (redundant reads)"
427 427
428 for i in samples: 428 for i in samples:
429 for x in i: 429 for x in i:
430 lengths.append(x[3]) 430 lengths.append(x[3])
431 if x[1]=="0": 431 if x[1]=="0":
490 ############################################################################################################################################################################################################################################## 490 ##############################################################################################################################################################################################################################################
491 491
492 def logo_seq_red(merge, flag, group): 492 def logo_seq_red(merge, flag, group):
493 493
494 if flag=="c": 494 if flag=="c":
495 titlos = group + " group (Redundant)" 495 titlos = group + " group (redundant)"
496 file_logo = "c_logo.png" 496 file_logo = "c_logo.png"
497 file_bar = "c_bar.png" 497 file_bar = "c_bar.png"
498 if flag=="t": 498 if flag=="t":
499 titlos = group + " group (Redundant)" 499 titlos = group + " group (redundant)"
500 file_logo = "t_logo.png" 500 file_logo = "t_logo.png"
501 file_bar = "t_bar.png" 501 file_bar = "t_bar.png"
502 502
503 c_samples=[[x[0],x[1],sum(int(i) for i in x[2:])] for x in merge] 503 c_samples=[[x[0],x[1],sum(int(i) for i in x[2:])] for x in merge]
504 504
593 pdf.add_page() 593 pdf.add_page()
594 # Set font to Arial, 'B'old, 16 pts 594 # Set font to Arial, 'B'old, 16 pts
595 pdf.set_font('Arial', 'B', 20.0) 595 pdf.set_font('Arial', 'B', 20.0)
596 596
597 # Page header 597 # Page header
598 pdf.cell(pdf.w-0.5, 0.5, 'IsomiR Profile Report',align='C') 598 pdf.cell(pdf.w-0.5, 0.5, 'IsomiR profile report',align='C')
599 pdf.ln(0.7) 599 pdf.ln(0.7)
600 pdf.set_font('Arial','', 16.0) 600 pdf.set_font('Arial','', 16.0)
601 pdf.cell(pdf.w-0.5, 0.5, 'sRNA length distribution',align='C') 601 pdf.cell(pdf.w-0.5, 0.5, 'sRNA length distribution',align='C')
602 602
603 # Smaller font for image captions 603 # Smaller font for image captions
611 pdf.image(images[1],x=4,y=yh, w=4, h=3) 611 pdf.image(images[1],x=4,y=yh, w=4, h=3)
612 pdf.ln(0.3) 612 pdf.ln(0.3)
613 613
614 # Image caption 614 # Image caption
615 pdf.cell(0.2) 615 pdf.cell(0.2)
616 pdf.cell(3.0, 0.0, " Mapped and unmapped reads to custom precussor arm reference DB (5p and 3p arms) in "+group_name1) 616 pdf.cell(3.0, 0.0, " Mapped and unmapped reads to custom precursor arm reference DB (5p and 3p arms) in "+group_name1.lower())
617 pdf.ln(0.2) 617 pdf.ln(0.2)
618 pdf.cell(0.2) 618 pdf.cell(0.2)
619 pdf.cell(3.0, 0.0, " (left) and "+group_name2+" (right) groups") 619 pdf.cell(3.0, 0.0, " (left) and "+group_name2.lower()+" (right) groups")
620 620
621 621
622 pdf.ln(0.5) 622 pdf.ln(0.5)
623 h1=FPDF.get_y(pdf) 623 h1=FPDF.get_y(pdf)
624 pdf.image(images[2],x=1, w=6.5, h=5) 624 pdf.image(images[2],x=1, w=6.5, h=5)
633 pdf.cell(0.2) 633 pdf.cell(0.2)
634 if analysis=="2": 634 if analysis=="2":
635 pdf.cell(3.0, 0.0, " RefSeq miRNAs, templated isomiRs, non-templated isomiRs and unassigned sequences as percentage") 635 pdf.cell(3.0, 0.0, " RefSeq miRNAs, templated isomiRs, non-templated isomiRs and unassigned sequences as percentage")
636 pdf.ln(0.2) 636 pdf.ln(0.2)
637 pdf.cell(0.2) 637 pdf.cell(0.2)
638 pdf.cell(3.0, 0.0, " of total sRNA reads in "+group_name1+" (left) and "+group_name2+" (right) groups") 638 pdf.cell(3.0, 0.0, " of total sRNA reads in "+group_name1.lower()+" (left) and "+group_name2.lower()+" (right) groups")
639 639
640 else: 640 else:
641 pdf.cell(3.0, 0.0, " RefSeq miRNAS, Templated isomiRs and unassigned sequences as percentage of total sRNA reads in") 641 pdf.cell(3.0, 0.0, " RefSeq miRNAS, Templated isomiRs and unassigned sequences as percentage of total sRNA reads in")
642 pdf.ln(0.2) 642 pdf.ln(0.2)
643 pdf.cell(0.2) 643 pdf.cell(0.2)
644 pdf.cell(3.0, 0.0, " "+group_name1+" (left) and "+group_name2+" (right) groups") 644 pdf.cell(3.0, 0.0, " "+group_name1.lower()+" (left) and "+group_name2.lower()+" (right) groups")
645 645
646 pdf.add_page() 646 pdf.add_page()
647 pdf.set_font('Arial', 'B', 18.0) 647 pdf.set_font('Arial', 'B', 18.0)
648 pdf.cell(pdf.w-0.5, 0.5, "Templated isomiR subtypes",align='C') 648 pdf.cell(pdf.w-0.5, 0.5, "Templated isomiR subtypes",align='C')
649 pdf.ln(0.7) 649 pdf.ln(0.7)