Как создать функцию для построения вложенного списка и списка

#python #matplotlib

Вопрос:

Я пишу функцию для отображения графика с несколькими линиями. Каждая строка представляет столбец в моем массиве numpy. Моя ось x-это переменный год, а моя ось y-это мой np.массив. Я изо всех сил пытаюсь найти правильное место для правильной вставки вложенного списка в код, чтобы показать строку каждого поля на графике в зависимости от года

 year = [2000,2001,2002,2003]
notes = [[10,11,11,14],[11,14,15,16],[15,14,12,11],[14,11,10,14]]
legend = {'maths':1, 'philosophy': 2, 'english': 3, 'biology': 4}

def PlotData (data,legend):
    for i in data:
        plt.plot(i,color = 'red' , marker = '.', 
                 markersize = 10, linestyle = 'solid')
        plt.legend(legend,loc ='upper left')
        plt.title('Final Examination')
        plt.xlabel('Year')
        plt.ylabel('Marks')
        plt.show()

PlotData((year,notes), legend)
 

Ответ №1:

Сначала вам нужно отделить ось x от оси y, потому что у вас есть только 1 массив для x и несколько для y.

 year, notes = data
 

Затем вам нужно фактически указать ось x в своем коде, добавив year «до i «.

 plt.plot(year, i , marker = '.', 
                 markersize = 10, linestyle = 'solid')
 

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

  • я удалил color=red его, чтобы сделать график более четким с несколькими цветами.
 year = [2000,2001,2002,2003]
notes = [[10,11,11,14],[11,14,15,16],[15,14,12,11],[14,11,10,14]]
legend = {'maths':1, 'philosophy': 2, 'english': 3, 'biology': 4}

def PlotData (data,legend):
    year, notes = data
    for i in notes:
        plt.plot(year, i , marker = '.', 
                 markersize = 10, linestyle = 'solid')
    plt.legend(legend,loc ='upper left')
    plt.title('Final Examination')
    plt.xlabel('Year')
    plt.ylabel('Marks')
    plt.show()

PlotData((year,notes), legend)
 

Результат:

введите описание изображения здесь

Комментарии:

1. aim97 , если каждая отметка во вложенном списке имеет форму, например( [10,11,11,14] для [математики,философии,английского языка , биологии] в 2000 году…), мне нужно использовать другой цикл for, чтобы подбирать каждый год, верно?

2. @Cressydeborbon если это так, вам лучше переформатировать свой список (возможно, выполнить транспонирование с помощью numpy) или выполнить итерацию по столбцам вместо строк, чтобы поместить данные в формат, подходящий для отображения, чем работать непосредственно с этим форматом (что может вызвать проблемы с matplotlib с порядком точек).