我对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()
数据文件中列的名称为it
,eps
,sig
,tc
,sc
,te
,{ {1}},se
和ubf
。
数据文件名为i
。
在您看到使用此代码时,我可以相互绘制任意两个不同的列。但我只能为一个数据文件做这件事。
如何更改此代码以便能够调用不同的数据文件?
我实际上并没有自己编写这段代码,所以我不知道这一行是什么意思:
555_20K_tensionTestCentreCrack_L5a0_r0.01
还有这一行:
ax1.plot(a1[0],[x/1e6 for x in a1[2]],'-k',linewidth=lw)
对于我的奇怪问题再次抱歉。 如果您需要有关我案件的更多详细信息,请告诉我。
非常感谢