Как рисовать мини-столбчатые диаграммы внутри ячейки таблицыPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как рисовать мини-столбчатые диаграммы внутри ячейки таблицы

Сообщение Anonymous »

Я использую matplotlib для создания визуализации таблицы. Я хотел бы нарисовать мини-гистограмму внутри последней ячейки каждой строки таблицы. Мини-столбчатая диаграмма должна иметь два разных цвета, обозначающих разные проценты (на данный момент 50 % зеленый и 50 % красный, мы разберемся с этим позже). Я хотел бы также показать процент красной части внутри части с белым текстом.
Вот код Python для создания воспроизводимого примера того, что я уже сделал:

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

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

# Create a sample DataFrame
df = pd.DataFrame({
'A': np.random.randint(1, 10, 10),
'B': np.random.randint(1, 10, 10),
'C': np.random.randint(1, 10, 10),
'D': np.random.randint(1, 10, 10),
'BAR': np.random.randint(1, 10, 10),
})

# Function to draw mini-bar
def draw_mini_bar(ax, x, y, width, height, percentage):
ax.add_patch(plt.Rectangle((x, y), width, height, facecolor='#76ed33'))
ax.add_patch(plt.Rectangle((x, y), width * percentage / 100, height, facecolor='#f55d2f'))
plt.draw()

# Function to render table
def render_mpl_table(data, col_width=3.0, row_height=0.625, font_size=14,
header_color='#40466e', row_colors=['#f1f1f2', '#ffffff'], edge_color='w',
bbox=[0, 0, 1, 1], ax=None, **kwargs):

if ax is None:
size = (np.array(data.shape[::-1]) + np.array([0, 1])) * np.array([col_width, row_height])
fig, ax = plt.subplots(figsize=size)
ax.axis('off')

mpl_table = ax.table(cellText=data.values, bbox=bbox, colLabels=data.columns, **kwargs)

for k, cell in mpl_table._cells.items():
cell.set_edgecolor(edge_color)

if k[0] == 0:
cell.set_text_props(weight='bold', color='w')
cell.set_facecolor(header_color)
else:
cell.set_facecolor(row_colors[k[0]%len(row_colors)])

# DRAW BARS IN LAST COLUMN
if k[0] > 0 and k[1] == len(data.columns) - 1:
draw_mini_bar(ax, cell.get_x(), cell.get_y(), cell.get_width(), cell.get_height(), 50)

plt.show()

render_mpl_table(df)
Изображение

Когда я запускаю этот код, мини-гистограммы отображаются не так, как ожидалось. В частности, они либо появляются в неправильных позициях, либо цвета отображаются неправильно.
Кто-нибудь сталкивался с подобной проблемой или знает, как рисовать такие мини-гистограммы внутри ячейки таблицы matplotlib?
Я попробовал использовать метод add_patch() для рисования прямоугольников внутри ячеек таблицы. Моя цель состояла в том, чтобы создать мини-гистограммы в последней ячейке каждой строки. Я ожидал, что полоса будет полностью зеленой, а часть ее будет перекрыта красным цветом, обозначающим разные проценты (сейчас мне просто нужно установить 50% зеленого и 50% красного).
Однако результат оказался не таким, как ожидалось. Полосы либо отображались в неправильном положении, либо цвета отображались неправильно. Кажется, мне не удается правильно отобразить красный и зеленый разделы в ячейках таблицы.

Подробнее здесь: https://stackoverflow.com/questions/771 ... table-cell
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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