从一个图中包含多个列的多个文件中绘制数据

时间:2017-05-11 08:31:57

标签: python plot multiple-columns multiple-files

我对python很新,很抱歉,如果我的问题非常基础。 我有几个数据文件(比方说4),每个包含9列和n行(我需要跳过第一行,因为它是每列的名称)。我希望能够灵活地将任意两列相互绘制,同时在一个图形中进行绘制。 假设我想从所有数据文件中取第2列和第4列并相互绘图,并将它们放在一个图表中进行比较。 请问一般的方法是什么? 我看了很多不同的例子,但我找不到解决这个具体案例的例子。

下面是一段代码,用于为一个文件绘制彼此相对的两列:

from pylab import *

### processing function
def store(var,textFile):
    data=loadtxt(textFile,skiprows=1)
    it=[]
    eps=[]
    sig=[]
    tc=[]
    sc=[]
    te=[]
    se=[]
    ubf=[]
    for i in range(0,len(data)):
      it.append(float(data[i,1]))
      eps.append(float(data[i,0]))
      sig.append(float(data[i,4]))
      tc.append(float(data[i,6]))
      sc.append(float(data[i,2]))
      te.append(float(data[i,7]))
      se.append(float(data[i,3]))
      ubf.append(float(data[i,8]))
    var.append(it)
    var.append(eps)
    var.append(sig)
    var.append(tc)
    var.append(sc)
    var.append(te)
    var.append(se)
    var.append(ubf)

### data input
dataFile1='555_20K_tensionTestCentreCrack_L5a0_r0.01'

a1=[]
store(a1,dataFile1)

rcParams.update({'legend.numpoints':1,'font.size': 20,'axes.labelsize':25,'xtick.major.pad':10,'ytick.major.pad':10,'legend.fontsize':20})
lw=2
ms=10

### plots
crossSection=0.04

figure(0,figsize=(10,10))
ax1=subplot(1,1,1)
grid()
xlabel('iteration [-]')
ax1.plot(a1[0],[x/1e6 for x in a1[2]],'-k',linewidth=lw)
ylabel(r'$\sigma_1$ [MPa]')
#axis(ymin=0,ymax=10)
ax2 = ax1.twinx()
ax2.plot(a1[0],a1[7],'-r',linewidth=lw)
ylabel('unbForce [-]')

figure(1,figsize=(10,10))
ax1=subplot(1,1,1)
grid()
xlabel(r'$\varepsilon_1$ [millistrain]')
#axis(xmin=0,xmax=0.12)
plot([x*1e3 for x in a1[1]],[x/1e6 for x in a1[2]],'-k',linewidth=lw)
ylabel(r'$\sigma_1$ [MPa]')
#axis(ymin=0,ymax=10)
#savefig(dataFile1+'_sigVSeps.eps',dpi=1000,format='eps',transparent=False)

figure(2,figsize=(10,10))
ax1=subplot(1,1,1)
grid()
xlabel(r'$\varepsilon_1$ [millistrain]')
axis(xmin=0,xmax=0.12)
ax1.plot([x*1e3 for x in a1[1]],[x/1e6 for x in a1[2]],'-k',linewidth=lw)
ylabel(r'$\sigma_1$ [MPa]')
#axis(ymin=0,ymax=10)
ax2 = ax1.twinx()
ax2.plot([x*1e3 for x in a1[1]],a1[3],'-b',linewidth=lw)
ax2.plot([x*1e3 for x in a1[1]],a1[4],'-r',linewidth=lw)
ylabel('cumulative number of microcracks [-]')
legend(('tensile','shear'))
#savefig(dataFile1+'_sig&cracksVSeps.eps',dpi=1000,format='eps',transparent=False)

### show or save
show()

数据文件中列的名称为itepssigtcscte,{ {1}},seubf。 数据文件名为i。 在您看到使用此代码时,我可以相互绘制任意两个不同的列。但我只能为一个数据文件做这件事。 如何更改此代码以便能够调用不同的数据文件?

我实际上并没有自己编写这段代码,所以我不知道这一行是什么意思:

555_20K_tensionTestCentreCrack_L5a0_r0.01

还有这一行:

ax1.plot(a1[0],[x/1e6 for x in a1[2]],'-k',linewidth=lw)

对于我的奇怪问题再次抱歉。 如果您需要有关我案件的更多详细信息,请告诉我。

非常感谢

0 个答案:

没有答案