Возможно ли применить этот конкретный «вид» к столбчатой диаграмме matplotlib?

#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()
  

Выход:

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