Как нарисовать несколько графиков в одном кадре, используя python, который ось Y может видеть правильно? - PullRequest
0 голосов
/ 18 октября 2018

Я написал код Python для нескольких графиков в одном кадре, используя matpoltlib.Когда я вижу свое изображение, ось Y не отображает заголовок надлежащим образом (на самом деле он перекрывается или обрезается по номеру и т. Д.), И ось X должна иметь один заголовок, поскольку ось X одинакова для всех четырех (временная, потенциальная, общая)давление).Я загрузил изображение.если ты не видишь этого.пожалуйста, дайте мне знать.

файл initial.txt выглядит следующим образом:

   0      1865.74   -388642.31   -362596.65   -57421.263 
 100    100.39272   -388659.69   -387258.21   -68103.868 
 200    100.34027   -388677.95    -387277.2   -68090.633 
 300    100.25494   -388696.92   -387297.36    -68081.08 
 400    100.28753   -388716.37   -387316.36   -68072.858 
 500    100.27897   -388736.41   -387336.52    -68067.56 
 600    100.27288   -388757.61    -387357.8   -68056.853
 .
 . 

Input_Script:

import numpy as np
import matplotlib.pyplot as plt

x, y1, y2, y3, y4 = [], [],[], [], []

with open("initial.txt") as f:
    for line in f:
        cols = line.split()

        if len(cols) == 5:
            x.append(float(cols[0]))
            y1.append(float(cols[1]))
            y2.append(float(cols[2]))
            y3.append(float(cols[3]))
            y4.append(float(cols[4]))


plt.subplot(411)
plt.plot(x, y1, '-')
plt.title('initial_output')
plt.ylabel('temperature')

plt.subplot(412)
plt.plot(x, y2, '-')
plt.ylabel('potential')

plt.subplot(413)
plt.plot(x, y3, '-')
plt.ylabel('temperature')

plt.subplot(414)
plt.plot(x, y4, '-')
plt.xlabel('steps')
plt.ylabel('pressure')

plt.savefig("a.jpeg", dpi=100)

Вывод:

enter image description here

1 Ответ

0 голосов
/ 18 октября 2018

Я думаю, в конце концов вам просто нужно plt.tight_layout().Он переставляет мультиплотную фигуру.
Обратите внимание на опциональный rect -kwarg, который позволяет определить область в пределах вспомогательных участков, переупорядоченных, например, чтобы сохранить расстояние до заголовка глобальной фигуры (см. Также пример ниже).

Однако, если вы все равно используете numpy, вам не нужно импортировать текстовый файл вручную.Используйте, например, genfromtxt:

data = np.genfromtxt('initial.txt', names='x', 'temp_1','potential','temp_2', 'pressure'])

array([(  0., 1865.74   , -388642.31, -362596.65, -57421.263),
       (100.,  100.39272, -388659.69, -387258.21, -68103.868),
       (200.,  100.34027, -388677.95, -387277.2 , -68090.633),
       (300.,  100.25494, -388696.92, -387297.36, -68081.08 ),
       (400.,  100.28753, -388716.37, -387316.36, -68072.858),
       (500.,  100.27897, -388736.41, -387336.52, -68067.56 ),
       (600.,  100.27288, -388757.61, -387357.8 , -68056.853)],
      dtype=[('x', '<f8'), ('temp_1', '<f8'), ('potential', '<f8'), ('temp_2', '<f8'), ('pressure', '<f8')])

Затем, удобный способ создать несколько графиков на одной фигуре - plt.subplots.Например, у него есть простое ключевое слово для совместного использования одной оси x для всех вспомогательных участков:

fig, axs = plt.subplots(4, 1, sharex=True)
fig.suptitle('initial_output')

Затем просто выполните итерации по вашим данным и осям и все готово:

for ax, lbl in zip(axs, data.dtype.names[1:]):
    ax.plot(data['x'], data[lbl], label=lbl)
    ax.set_ylabel(lbl)

ax.set_xlabel('steps')
fig.tight_layout(rect=[0, 0, 1, .97])

Результат:

enter image description here

Все это говорит: если вы хотите действительно удобный импорт, анализ и построение данных, взгляните на pandas.https://pandas.pydata.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...