#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
ismen_means
,y
iswomen_means
иgroup_labels
islabels
. Конечно, вы должны переименовать свой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, тогда необходима параметрическая функция