заговор barplot из вложенного словаря с использованием matplotlib - PullRequest
1 голос
/ 01 апреля 2019

У меня есть вложенный диктант, который выглядит следующим образом.

{A: {   'apples': 3,
        'bananas':5,
        'oranges':6,
        'kiwis':9},
B: {    'apples': 1,
        'bananas':9,
        'oranges':3,
        'kiwis':1},
C: {    'apples': 6,
        'bananas':9,
        'oranges':3,
        'kiwis':3}}

В моем случае A, B, C - месяцы года в течение двух лет.Ось X - месяцы, т. е. A, B, C и т. д. Яблоки, бананы, киви и апельсины считаются.Я хотел бы построить сгруппированную вертикальную гистограмму, используя matplotlib.У него была бы легенда с тремя цветами для яблок, бананов и апельсинов.

Я могу строить только с использованием метода dataframe.plot:

pd.Dataframe(mydict).T.plot(kind=bar)

Я хочу иметь возможность построить графикТо же самое, используя matplotlib, чтобы я мог управлять размером фигуры и изменять размер столбцов и т. д.

Любая помощь приветствуется.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Во-первых, вы можете управлять фигурой с помощью аргумента figsize или сохранять axes, которые возвращаются методом .plot на фрейме данных, поэтому чистое решение matplotlib - не единственный путь.

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

d = {"A": {...}, ...}

import matplotlib.pyplot as plt
import numpy as np

# Get the ax object and hardcode a bar width
fig, ax = plt.subplots()

width = 0.05

# Each set of bars (e.g. "bananas") is offset from the xtick so they're grouped
# For example np.arange(3) - width*2 for an offset of negative two bar widths 
ax.bar(np.arange(3) - width*2, [d[j]["apples"] for j in d], width)
ax.bar(np.arange(3) - width, [d[j]["bananas"] for j in d], width)
ax.bar(np.arange(3), [d[j]["oranges"] for j in d], width)
ax.bar(np.arange(3) + width, [d[j]["kiwis"] for j in d], width)

# Labels
ax.set_xticks(np.arange(3))
ax.set_xticklabels(["A", "B", "C"])
0 голосов
/ 01 апреля 2019

Ниже приведен пример кода.Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, я был бы очень рад помочь вам.

# libraries
import numpy as np
import matplotlib.pyplot as plt

# set width of bar
barWidth = 0.25

# set height of bar
bars1 = [12, 30, 1, 8, 22]
bars2 = [28, 6, 16, 5, 10]
bars3 = [29, 3, 24, 25, 17]

# Set position of bar on X axis
r1 = np.arange(len(bars1))
r2 = [x + barWidth for x in r1]
r3 = [x + barWidth for x in r2]

# Make the plot
plt.bar(r1, bars1, color='#ff0000', width=barWidth, edgecolor='red', label='Apples')
plt.bar(r2, bars2, color='#FFFF00', width=barWidth, edgecolor='yellow', label='bananas')
plt.bar(r3, bars3, color='#FFA500', width=barWidth, edgecolor='orange', label='oranges')

# Add xticks on the middle of the group bars
plt.xlabel('group', fontweight='bold')
plt.xticks([r + barWidth for r in range(len(bars1))], ['04/01/2019', '04/02/2019', '04/03/2019', '04/04/2019', '04/05/2019'])

# Create legend & Show graphic
plt.legend()
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...