Python3.x, Matplotlib: построение графиков в цикле for - PullRequest
0 голосов
/ 12 октября 2019

Я хочу сделать сюжеты в цикле for. Это интегрировано в больший код. У меня есть несколько CSV-файлов, содержащих различные значения х и фиксированные значения у для всех файлов. Форма каждого файла одинакова. Например, это выглядит следующим образом: Набор данных № 1.

y   x1   x2   x3   x4
1  0.2  5.4  3.0  0.7
2  0.1  1.2  4.0  0.6
3  5.0  2.0  2.0  1.8
4  1.2  0.1  0.1  3.8
5  1.0  0.5  0.7  5.8
6  6.5  8.0  0.8  0.8

Значения x в каждом из данных соблюдаются: my_xdata=[array([0.2,0.1,5.0,1.2,1.0,6.5],[5.4,1.2,2.0,0.1,0.5,8.0],[3.0,4.0,2.0,0.1,0.7,0.8], [0.7,0.6,1.8,3.8,5.8,0.8)]

Мой желаемый результат - построение графиков x1 и y. , х2 и у, х3 и у и х4 и у. Но в настоящее время код не работает. Ниже приведен код, который у меня есть на данный момент.

for i in range(len(my_xdata)):
     for a in range(len(specific_x)):
         ax=plt.subplot(4,1,i+1)
         ax.plot(my_y,my_xdata[i])
         ax.set_xlim(15,70)
         ax.axhline(y=0.1, linestyle='--', color='k')
         ax.axhline(y=0.5, linestyle='--', color='k')
         ax.axhline(y=0.9, linestyle='--', color='k')
         ax.axvline(x=median_ten1[a], linestyle='--', color='k')
         ax.axvline(x=median_fifty1[a], linestyle='--', color='k')
         ax.axvline(x=median_ninety1[a], linestyle='--', color='k')
         ax.show()

Он не работает.

Я получаю следующее сообщение об ошибке, num must be 1 <= num <= 4, not 5. Есть идеи?

specific_x не так уж важно, но если вы хотите знать. Вот оно:

for i in range(len(my_xdata)):
   f90= interp1d(my_xdata[i], my_y, assume_sorted = False) #interpolate the x values 
   specific_x.append(f90(1.2)) #determine the x values when y is 1.2

1 Ответ

0 голосов
/ 12 октября 2019

Не удалось воспроизвести сообщение об ошибке, построение графиков на вспомогательных участках с циклом for работает вполне нормально. Для тестирования я использовал следующий код:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

my_xdata=np.array([[0.2,0.1,5.0,1.2,1.0,6.5],[5.4,1.2,2.0,0.1,0.5,8.0],[3.0,4.0,2.0,0.1,0.7,0.8],[0.7,0.6,1.8,3.8,5.8,0.8]])
my_y = np.array([10,20,30,40,50,60])

specific_x = []
for i in range(len(my_xdata)):
   f90= interp1d(my_xdata[i], my_y, assume_sorted = False) #interpolate the x values 
   specific_x.append(f90(1.2)) #determine the x values when y is 1.2


for i in range(len(my_xdata)):
     for a in range(len(specific_x)):
         ax=plt.subplot(4,1,i+1)
         ax.plot(my_y,my_xdata[i])
         ax.set_xlim(15,70)
         ax.axhline(y=0.1, linestyle='--', color='k')
         ax.axhline(y=0.5, linestyle='--', color='k')
         ax.axhline(y=0.9, linestyle='--', color='k')
#         ax.axvline(x=median_ten1[a], linestyle='--', color='k')
#         ax.axvline(x=median_fifty1[a], linestyle='--', color='k')
#         ax.axvline(x=median_ninety1[a], linestyle='--', color='k')
         #ax.show()

выход matplotlib 4 субплота

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