Python Create Bar Chart Сравнение 2 наборов данных - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть ноутбук с 2 * гистограммами, один - зимние данные, а другой - летние. Я подсчитал сумму всех преступлений и нанес их на гистограмму, используя код:

ax = summer["crime_type"].value_counts().plot(kind='bar')
plt.show()

Который показывает график типа:

enter image description here

У меня есть другая диаграмма, почти идентичная, но для зимы:

ax = winter["crime_type"].value_counts().plot(kind='bar')
plt.show()

И я хотел бы сравнить эти две диаграммы друг с другом на одной и той же гистограмме (где каждое преступление на оси х имеет 2 столбца: зимой и летом).

Я пытался, что я только экспериментирую:

bx = (summer["crime_type"],winter["crime_type"]).value_counts().plot(kind='bar')
plt.show()

Любой совет будет оценен!

1 Ответ

0 голосов
/ 07 ноября 2018

Следующее генерирует фиктивные данные и делает сгруппированную гистограмму, которую вы хотели:

import random
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

s = "Crime Type Summer|Crime Type Winter".split("|")

# Generate dummy data into a dataframe
j = {x: [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]
                       ) for j in range(300)] for x in s}
df = pd.DataFrame(j)

index = np.arange(5)
bar_width = 0.35

fig, ax = plt.subplots()
summer = ax.bar(index, df["Crime Type Summer"].value_counts(), bar_width,
                label="Summer")

winter = ax.bar(index+bar_width, df["Crime Type Winter"].value_counts(),
                 bar_width, label="Winter")

ax.set_xlabel('Category')
ax.set_ylabel('Incidence')
ax.set_title('Crime incidence by season, type')
ax.set_xticks(index + bar_width / 2)
ax.set_xticklabels(["ASB", "Violence", "Theft", "Public Order", "Drugs"])
ax.legend()

plt.show()

С этим скриптом я получил:

this image

Вы можете ознакомиться с демонстрацией в документации по matplotlib здесь: https://matplotlib.org/gallery/statistics/barchart_demo.html

Важно отметить индекс!

index = np.arange(5) # Set an index of n crime types
...
summer = ax.bar(index, ...)
winter = ax.bar(index+bar_width, ...)
...
ax.set_xticks(index + bar_width / 2)

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

...