форматирование matplotlib с использованием списка внутри списка

#python #python-3.x #list #matplotlib

#python #python-3.x #Список #matplotlib

Вопрос:

Здравствуйте, я использую matplotlib, и ниже есть эта функция, которую я использую для размещения меток данных для 3 разных графиков, которые имеют одинаковые значения x (x_indexes), но отличаются значениями y (bar_positions, Max_profit , Max_drawdown). Мне нужна функция, которая позволит применять формат метки данных ко всем значениям y. Спасибо за помощь:

 x_indexes= [0,1,2,3,4,5,6]
bar_positions= [10,20,30,40,50,60,70]
Max_profit= [1,3,5,7,9,11,13]
Max_drawdown= [1,1,2,2,3,3,4]
bar_char = [bar_positions, Max_profit,Max_drawdown]
    for x,y in zip(x_indexes,#insert funtion that goes through bar_char[] here#):
        label = "{:.1f}".format(y)
        plt.annotate(label, # this is the text
                 (x,y), # this is the point to label
                 textcoords="offset points", # how to position the text
                 xytext=(0,20), # distance from text to points (x,y)
                 fontsize= 10,
                 rotation =90,    
                 ha='center') # horizontal alignment can be left, right or center 

 

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

1. Не могли бы вы уточнить вопрос? Не соответствует ли опубликованный вами код вашим требованиям и почему?

2. @Stef Мне нужна функция для просмотра всех имен списков в bar_char. Если я введу for x,y in zip(x_indexes,bar_char[0]) его, он будет форматироваться только bar_positions так, как я хочу, чтобы он форматировал все 3 списка ( bar_positions, Max_profit , Max_drawdown ). Я пока не смог этого сделать.

3. Вы можете сделать это исключительно с помощью matplotlib и списков. Но рассматривали ли вы возможность использования pandas для этого? pandas использует matplotlib для построения графиков и, как правило, автоматически форматирует графики удобным способом.

Ответ №1:

Ваше текущее использование zip имеет первый аргумент x_indexes , который содержит 7 элементов, вторым аргументом [bar_positions, Max_profit,Max_drawdown] которого является список из 3 х 7 списков элементов.

Что вам нужно сделать, так это zip 21 x_indexes (3 повторения x_indexes) с 21 позицией (объединение 3 списков)

 bar_char = bar_positions   Max_profit   Max_drawdown  # list with 21 positions
    for x,y in zip(3 * x_indexes, bar_char ):
 

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

1. Спасибо, это здорово