Как построить график сгруппированной линейки из списка пар в Python?

#python #python-3.x #matplotlib #plot #bar-chart

#python #python-3.x #matplotlib #построить #гистограмма

Вопрос:

У меня есть этот список «координат»:

    myList = [[0.7366771159874608, 0.6270718232044199], [0.7382352941176471, 0.6710182767624021], [0.7967479674796748, 0.656441717791411], [0.7296511627906976, 0.5727109515260324], [0.7992700729927007, 0.5833333333333334], [0.750788643533123, 0.5288888888888889], [0.851063829787234, 0.7423312883435583], [0.767515923566879, 0.5525114155251142]]
  

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

Мой код:

 import matplotlib.pyplot as plt
x, y = zip(*mylist)
group_labels = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII']
plt.bar(x, y)

plt.title("Trial")
plt.show()
  

Как я должен изменить свой набор данных, чтобы достичь своей цели?

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

1. Пожалуйста, не называйте свой список координат «списком». Этот термин является встроенным типом в Python — вы будете перезаписывать его в своем коде, делая list() непригодным для использования. Однако я не понимаю вашего желаемого результата. Что такое столбчатая диаграмма с координатами x, y? Что здесь сложено в каждой группе? Можете ли вы предоставить образец вывода из Интернета?

2. Он не сложен, а сгруппирован, см. Это Изображение: ссылка . Пары моего списка должны быть сгруппированы, как на изображении. Теперь это понятнее? (Я также изменил название списка, спасибо!)

3. Но это прямо из галереи matplotlib . С какими трудностями вы столкнулись, адаптируя этот пример к вашим потребностям?

4. Я не знаю, что вводить в качестве входных данных, примеры в Интернете не подходят для моего случая.

5. Почему бы и нет? Кажется, вы можете просто заменить переменные: x is men_means , y is women_means и group_labels is labels . Конечно, вы должны переименовать свой x — пример кода также использует переменную x для другой цели.

Ответ №1:

Адаптировано из документов.

 %matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

ar = [[0.7366771159874608, 0.6270718232044199], 
      [0.7382352941176471, 0.6710182767624021], 
      [0.7967479674796748, 0.656441717791411], 
      [0.7296511627906976, 0.5727109515260324], 
      [0.7992700729927007, 0.5833333333333334], 
      [0.750788643533123, 0.5288888888888889], 
      [0.851063829787234, 0.7423312883435583], 
      [0.767515923566879, 0.5525114155251142]
     ]

xx, yy = zip(*ar)
group_labels = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII']
x = np.arange(len(group_labels))
width = 0.35

fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, xx, width)
rects2 = ax.bar(x   width/2, yy, width)
ax.set_xticklabels(group_labels)
ax
  

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

Ответ №2:

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

К сожалению, это изначально не реализовано в matplotlib python, но вы можете использовать pandas для достижения желаемого результата. Код

 import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
myList = [[0.7366771159874608, 0.6270718232044199], [0.7382352941176471, 0.6710182767624021], [0.7967479674796748, 0.656441717791411], [0.7296511627906976, 0.5727109515260324], [0.7992700729927007, 0.5833333333333334], [0.750788643533123, 0.5288888888888889], [0.851063829787234, 0.7423312883435583], [0.767515923566879, 0.5525114155251142]]
x, y = zip(*myList)
group_labels = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII']
df = pd.DataFrame(np.c_[x, y], index=group_labels)
df.plot.bar()
  

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

1. Если вам нужна альтернатива matplotlib, тогда @venky__ опубликовал решение, однако оно не будет работать для большего количества переменных, например, если вам нужно 3 или 4, тогда необходима параметрическая функция