Разделите сюжеты на несколько экранов - PullRequest
0 голосов
/ 31 мая 2019

Я хочу построить некоторые данные из CSV-файла, используя dataframe.

Мой код в настоящее время отображает 266 = 14 * 19 отдельных участков. В настоящее время он закодирован для отображения всех 266 вспомогательных сюжетов на одном экране, и каждый из них является маленьким и трудным для чтения.

Я пытался использовать сюжет 1x1

#fig, cx=plt.subplots(1,1, sharex=False, sharey=False, figsize=(18,12))

Основной код:

fig, cx=plt.subplots(14,19, sharex=False, sharey=False, figsize=(18,12))
#fig, cx=plt.subplots(1,1, sharex=False, sharey=False, figsize=(18,12))

plt.subplots_adjust(hspace=0.5)

cx = cx.ravel()

for i in range(0,len(Bond)):
    cx[i].plot(VelLog[Bond[i]], color='b')
    cx[i].set_xlabel('Time (ms)')
    cx[i].set_ylabel('Velocity (m/s)')
    cx[i].set_ylim(-250,150)
    cx[i].set_title(Bond[i])

plt.savefig('Velocity.png', dpi=120)
plt.show()
##################################
Error message when I un-comment Line 1
cx[i].plot(VelLog[Bond[i]], color='b')
IndexError: index 209 is out of bounds for axis 0 with size 209

Как я могу отображать на экране только несколько вспомогательных сюжетов одновременно, чтобы повысить удобочитаемость?

Как 5x5 + 5x5 + 5x5 + 5x5 + 5x5, + 5x5 + 5x5 + 5x5 + 5x5 + 5x5 + 4x4 = 266

11 разных экранов.

Есть ли способ добавить фильтр диаграммы в качестве альтернативы?

Вот мой обновленный код с вашими предложениями. Теперь он создает 11 фигур. Мне удалось построить все 266 графиков, но каждый график выглядит одинаково

Nrows, Ncols = 14, 19
Nplots = Nrows*Ncols

nrows, ncols = 5, 5
naxes = nrows*ncols

nfigures = Nplots//naxes

count = 0
figures = []

for fignum in range(nfigures+1):
    fig, axes = plt.subplots(nrows, ncols,  sharex=False, sharey=False, figsize=(18,12))
    plt.subplots_adjust(hspace=0.5)
    #axes = axes.ravel()
    figures.append(fig)
    axes = axes.flat
    for ax in axes:
        #print(count)
        if count<Nplots:
            for i in range(0,len(Bond)):
                cvs_row, cvs_col = divmod(count, Ncols)
                cvs_row, cvs_col = cvs_row+1, cvs_col+1
                ax.plot(VelLog[Bond[i]], color='b', label='%d,%d'%(cvs_row, cvs_col))
                ax.set_xlabel('Time (ms)')
                ax.set_ylabel('Velocity (m/s)')
                ax.set_ylim(-250,150)
                ax.set_title(Bond[i])
            count = count+1

plt.savefig('Velocity.png', dpi=120)
plt.show()

Вот результат для одной фигуры введите описание изображения здесь

1 Ответ

0 голосов
/ 31 мая 2019

Здесь я рисую одну и ту же функцию 14 * 19 раз, но вы можете получить представление

У нас есть две проблемы: отслеживать то, что мы строим, и откладывать фактическое построение, пока мы не закончим со всемиих.

Первая проблема здесь решается с помощью глобального счетчика и встроенного divmod, вторая хранит все цифры в списке и вызывает plt.show() только в самом конце фазы построения.

Чтобы показать, что я имею в виду под "отслеживанием", я добавил ярлык и легенду к каждому отдельному сюжету.

Чтобы сохранить разумность, я не проверяю, является ли последняя цифра пустой, итакже я не проверяю, что некоторые вспомогательные участки последних фигур пусты, но помните, что вы можете удалить некоторые вспомогательные участки из рисунка, если хотите получить чистую последнюю цифру.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, np.pi, 31)
y = np.sin(x)

Nrows, Ncols = 14, 19
Nplots = Nrows*Ncols

nrows, ncols = 5, 5
naxes = nrows*ncols

nfigures = Nplots//naxes

count = 0
figures = []

for fignum in range(nfigures+1):
    fig, axes = plt.subplots(nrows, ncols)
    figures.append(fig)
    axes = axes.flat
    for ax in axes:
        print(count)
        if count<Nplots:
            cvs_row, cvs_col = divmod(count, Ncols)
            cvs_row, cvs_col = cvs_row+1, cvs_col+1
            ax.plot(x, y, label='%d,%d'%(cvs_row, cvs_col))
            ax.legend()
            count = count+1

plt.show()

Здесь я показываю только последниерисунок, чтобы показать, что я имею в виду с "пустыми участками" ...

enter image description here

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