контурный график с файлами mutiplile - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть последовательность файлов данных, которые содержат два столбца данных (значение x и значение z). Я хочу присвоить каждому файлу уникальное постоянное значение y с помощью al oop, а затем использовать значения 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()

В этом коде нет ошибки, однако то, что я получил, это пустая фигура без ничего.

Какую ошибку я совершил?

1 Ответ

0 голосов
/ 28 апреля 2020

Очень трудно догадаться, что ты пытаешься сделать. Вот попытка. Предполагается, что все x-массивы равны. И это действительно имеет смысл (хотя это трудно, если файлы читаются в неуказанном порядке). Чтобы получить полезный график, данные из всех файлов должны быть собраны перед началом построения.

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

...