#python #matplotlib #data-visualization
#python #matplotlib #визуализация данных
Вопрос:
Я ищу советы по получению моих данных из фрейма данных pandas в диаграмму matplotlib, которая выглядит следующим образом:
Возможно ли это вообще без особых усилий?
Заранее спасибо за любой совет!
Комментарии:
1. Теперь ваш вопрос решен?
Ответ №1:
Можно использовать следующую функциональность:
- Сгенерируйте стандартный столбчатый график, используя pandas ‘
df.plot.bar()
- Перебирайте сгенерированные столбцы, чтобы изменить их цвет и альфа. Также используйте размеры строки для размещения текста с высотой.
- Удалите все корешки, кроме нижнего корешка.
- Измените ширину линии нижнего корешка.
- Используйте
grid()
для размещения горизонтальных линий сетки. - Используйте
tick_params()
, чтобы удалить метки и изменить цвет и размер метки. Y-образные метки не могут быть удалены, поскольку они необходимы для позиционирования линий сетки.
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame({'Values': [40, 55, 60, 94, 79, 49]},
index=['January', 'February', 'March', 'April', 'May', 'June'])
colors = plt.cm.tab10.colors[:len(df)]
ax = df.plot.bar(width=0.9, legend=False)
for p, color in zip(ax.patches, colors):
p.set_color(color)
p.set_alpha(0.6)
ax.text(p.get_x() p.get_width() / 2, p.get_y() p.get_height() / 2, f'{p.get_height():.0f}', ha='center',
va='center', fontsize=20)
ax.grid(axis='y')
for where in ['left', 'right', 'top']:
ax.spines[where].set_visible(False)
ax.spines['bottom'].set_linewidth(3)
ax.tick_params(axis='y', length=0, labelcolor='none')
ax.tick_params(axis='x', length=0, rotation=0, labelsize=14)
plt.tight_layout()
plt.show()
PS: Если вам нужны более похожие на серый цвета, вы могли бы сначала сделать их темнее:
colors = [(r*0.6, g*0.6, b*0.6) for r, g, b in colors]
И все еще использовать альфа ( 0.5
?), чтобы снова сделать их белее.
Ответ №2:
После инициализации вашего фрейма данных вы могли бы получить столбчатую диаграмму df.plot.bar
или df.plot(kind='bar')
.
Для каждого столбца вы можете задать цвет, используя либо шестнадцатеричное значение, либо название цвета.
Наконец, чтобы сделать надпись на столбчатой диаграмме, вам нужно получить размер графика.
Ниже приведен пример:
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
data = {'T1-Hotshots': [40],
'Type_2_IA': [55],
'Engines': [60],
'Helicopters': [94],
'Dozers': [79],
'Patrols': [49]}
df = pd.DataFrame(data, columns=['T1-Hotshots',
'Type_2_IA',
'Engines',
'Helicopters',
'Dozers',
'Patrols'])
x_pos = [i for i, _ in enumerate(data)]
plt.figure(figsize=(12, 8))
ax = df.plot(kind='bar', color=['blue', 'green', 'yellow', 'orange',
'purple', 'red'])
rects = ax.patches
labels = [df[key].values[0] for key in df]
for rect, label in zip(ax.patches, labels):
height = rect.get_height()
ax.text(rect.get_x() rect.get_width() / 2, height - 25, label,
ha='center', va='bottom')
plt.show()
Выход: