Как построить разные подзаговоры с точки зрения разных файлов, расположенных в одном каталоге? - PullRequest
2 голосов
/ 28 марта 2020

У меня есть каталог с 10 различными txt-файлами. Каждый txt-файл содержит одну x-строку и одну y-строку, структура файлов всегда одинакова, но значения отличаются друг от друга. Я хочу построить несколько вспомогательных участков (всего 10, только одну цифру !), И каждый вложенный участок должен представлять ровно один файл. Другими словами, в конце я хотел бы иметь десять разных графиков, которые соответствуют txt-файлам. Мой первый подход заключается в следующем:

%matplotlib inline
import glob
import pandas as pd
import matplotlib.pyplot as plt

data_path = 'C:\\Users\\MyPath'

fig, ax = plt.subplots(nrows=5, ncols=2, figsize=(8, 6))
fig.tight_layout()

files = glob.glob(data_path+'/*.txt')

for file in files:
    df = pd.read_csv(file)
    for row in range(5):
        for col in range(2):
            ax[row][col].plot(df['time'], df['signal'], c='green')

Проблема в моем коде заключается в том, что все файлы отображаются на каждом участке, см. Пример: Example subplots Он зацикливается на все файлы перед готовит их, но это должно останавливаться на каждом новом файле ... Как я могу решить проблему, чтобы в каждом подпотеке был «представлен» только один указанный c файл? Буду благодарен за любые советы. Пожалуйста, имейте в виду, что я не профессионал. Спасибо за помощь уже заранее.

1 Ответ

1 голос
/ 28 марта 2020

ax - это numpy ndarray of Axes - выровняйте его и переберите с файлами.

...
for axn,file in zip(ax.flatten(),files):
    df = pd.read_csv(file)
    axn.plot(df['time'], df['signal'], c='green')

Или:

...
for axn,file in zip(ax.flatten(),files):
    df = pd.read_csv(file)
    df.plot(x='time', y='signal', ax=axn, c='green')

https://matplotlib.org/3.2.1/api/_as_gen/matplotlib.pyplot.subplots.html

...