具有多重文件的轮廓图

问题描述 投票:0回答:1

我有一个数据文件序列,其中包含两列数据(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()

此代码中没有错误,但是我得到的是一个空无一物的数字。

我犯了什么错误?

python matplotlib plot contour
1个回答
0
投票

很难猜测您要做什么。这是一个尝试。假设所有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()

使用模拟的随机数据,散点图和轮廓图看起来像:

resulting plot

© www.soinside.com 2019 - 2024. All rights reserved.