我有一个数据文件序列,其中包含两列数据(x值和z值)。我想用循环为每个文件分配一个唯一的y常数,然后使用x,y,z值绘制轮廓图。
import glob
import matplotlib.pyplot as plt
import numpy as np
files=glob.glob('C:\Users\DDT\Desktop\DATA TIANYU\materials\AB2O4\synchronchron\OX1\YbFe1Mn1O4_2cyc_600_meth_ox1-*.xye')
s1=1
for file in files:
t1=s1/3
x,z = np.loadtxt(file,skiprows=3,unpack=True, usecols=[0,1])
def f(x, y):
return x*0 +y*0 +z
l1=np.size(x)
y=np.full(l1, t1,dtype=int)
X,Y=np.meshgrid(x,y)
Z = f(X,Y)
plt.contour(X,Y,Z)
s1=s1+1
continue
plt.show()
此代码中没有错误,但是我得到的是一个空无一物的数字。
我犯了什么错误?
很难猜测您要做什么。这是一个尝试。假设所有x数组都相等。而且y确实有意义(尽管如果以未指定的顺序读取文件,则很难做到)。为了获得有用的绘图,应在开始绘图之前收集所有文件的数据。
import glob
import matplotlib.pyplot as plt
import numpy as np
files = glob.glob('........')
zs = []
for file in files:
x, z = np.loadtxt(file, skiprows=3, unpack=True, usecols=[0, 1])
zs.append(z)
# without creating a new x, the x from the last file will be used
# x = np.linspace(0, 15, 10)
y = np.linspace(-100, 1000, len(zs))
zs = np.array(zs)
fig, axs = plt.subplots(ncols=2)
axs[0].scatter(np.tile(x, y.size), np.repeat(y, x.size), c=zs)
axs[1].contour(x, y, zs)
plt.show()
使用模拟的随机数据,散点图和轮廓图看起来像: