Matplotlib初体验

时间:2023-03-09 09:17:00
Matplotlib初体验

为一个客户做了关于每个差异otu在时间点上变化的折线图,使用python第一次做批量作图的程序,虽然是很简单的折线图,但是也是第一次使用matplotlib的纪念。

ps:在第一个脚本上做了点小的改动,加上了分类信息作为图的标题,加上网格便于对照y轴丰度值,x轴的名称更加接近样品的实际名称。

 from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
import sys def main():
file = sys.argv[1]
x = np.array([0,6,12,18])
mean_file = ['../c-%dm_vs_cf-%dm.mean.profile'%(t,t) for t in [0,6,12,18]]
with open(file) as f:
f.next()
for line in f:
C = []
CF = []
tabs = line.strip().split('\t')
otu_name = tabs.pop(0)
for file in mean_file:
(C_temp,CF_temp) = getMeanProfile(otu_name,file)
C.append(float(C_temp))
CF.append(float(CF_temp))
C = np.array(C)
CF = np.array(CF)
tax_name = tax[otu_name]
do_plot(tax_name,otu_name,x,C,CF)
f.close() def getMeanProfile(otu_name,file):
handle = open(file)
handle.next()
for line in handle:
tabs = line.strip().split('\t')
if otu_name != tabs[0]:
continue
return( (tabs[1],tabs[2]) )
handle.close() def do_plot(title,file_name,x,y1,y2):
plt.figure(figsize=(10,6))
ax = plt.subplot(111)
plt.plot(x,y1,label="C",color="red",linewidth=2)
plt.plot(x,y2,label="CF",color="blue",linewidth=2)
xmajorLocator = MultipleLocator(6)
xmajorFormatter = FormatStrFormatter('%dm')
yRange = ( max(np.max(y1),np.max(y2)) - min(np.min(y1),np.min(y2)) )
ymajorLocator = MultipleLocator(yRange/10)
yminorLocator = MultipleLocator(yRange/40)
ax.xaxis.set_major_locator(xmajorLocator)
ax.xaxis.set_major_formatter(xmajorFormatter)
ax.yaxis.set_major_locator(ymajorLocator)
ax.yaxis.set_minor_locator(yminorLocator)
ax.xaxis.grid(True,which='major')
ax.yaxis.grid(True,which='minor')
plt.xlabel("Month(s)")
plt.ylabel("mean_profile")
plt.title(title)
plt.legend()
plt.savefig("%s.png"%file_name,dpi=80) def getTax():
for line in open('../tax.txt'):
tabs = line.strip().split('\t')
for line in open('../tax.txt'):
tabs = line.strip().split('\t')
tax[tabs[0]] = tabs[1].split(';')[-1] if __name__ == '__main__':
tax = {}
getTax()
main()