Гистограмма pandas с парными столбцамиPython

Программы на Python
Ответить
Anonymous
 Гистограмма pandas с парными столбцами

Сообщение Anonymous »

У меня есть DataFrame с парными столбцами. Я хочу построить его так, чтобы каждая пара столбцов имела уникальный цвет, а один столбец каждой пары имел пустую заливку.
Я попробовал это:< /p>

Код: Выделить всё

import pandas as pd

df = pd.DataFrame({
('A', '1'): [1, 2, 3],
('A', '2'): [4, 5, 6],
('B', '1'): [7, 8, 9],
('B', '2'): [10, 11, 12]
})

df.plot.bar(color=['C0', 'none', 'C1', 'none'], edgecolor=['C0', 'C0', 'C1', 'C1'])
Это почти работает! Но он применяет цвета границ по строкам, а не по столбцам.
[img]https:/ /i.sstatic.net/psVpVEfg.png[/img]

Я попросил ChatGPT спасти мою задницу. Это дало мне работающее решение (см. слегка измененную версию ниже), но оно очень многословное. Мой вопрос: есть ли более простой способ сделать это, в идеале используя DataFrame.plot?

Код: Выделить всё

import pandas as pd
import matplotlib.pyplot as plt

# Sample DataFrame
df = pd.DataFrame({
('A', '1'): [1, 2, 3],
('A', '2'): [4, 5, 6],
('B', '1'): [7, 8, 9],
('B', '2'): [10, 11, 12]
})

# Define colors for each pair
colors = ['C0', 'C1']

# Create a bar chart
fig, ax = plt.subplots()

# Number of columns
num_cols = len(df.columns)

# Bar width
bar_width = 0.2

# Plot each pair of columns
for i in range(0, num_cols, 2):
color_i = colors[i//2]
ax.bar(df.index + i*bar_width, df.iloc[:, i], bar_width,
label=str(df.columns[i]), color=color_i, edgecolor=color_i)
ax.bar(df.index + (i+1)*bar_width, df.iloc[:, i+1], bar_width,
label=str(df.columns[i+1]), color='none', edgecolor=color_i)

# Add labels, title, and legend
ax.set_xlabel('Index')
ax.set_ylabel('Values')
ax.set_title('Bar chart with paired columns')
ax.set_xticks(df.index + bar_width * (num_cols / 2 - 0.5))
ax.set_xticklabels(df.index)
ax.legend()
Изображение



Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-columns
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»