Составьте таблицу вдоль графика с помощью matplotlib - PullRequest
0 голосов
/ 01 декабря 2018

на данный момент у меня есть этот кусок кода:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from matplotlib.font_manager import FontProperties


data = np.random.uniform(0, 1, 80).reshape(20, 4)
final_data = [['%.3f' % j for j in i] for i in data]

mpl.style.use('seaborn')
mpl.rc('xtick', labelsize = 7)
mpl.rc('ytick', labelsize = 7)

fig = plt.figure()

fig.subplots_adjust(left=0.1, wspace=0.1)
plt.subplot2grid((1, 4), (0, 0), colspan=3)

table_subplot = plt.subplot2grid((1, 4), (0, 3))

table = plt.table(cellText=final_data, colLabels=['A', 'B', 'C', 'D'], loc='center', cellLoc='center', colColours=['#FFFFFF', '#F3CC32', '#2769BD', '#DC3735'])
table.auto_set_font_size(False)
table.set_fontsize(7)
table.auto_set_column_width((-1, 0, 1, 2, 3))

for (row, col), cell in table.get_celld().items():
    if (row == 0):
        cell.set_text_props(fontproperties=FontProperties(weight='bold', size=7))

plt.axis('off')
plt.show()

, который производит это как выход:

enter image description here

Я знаю, что график пуст, но я планирую добавить туда некоторые данные, поэтому я должен помнить об этом!Я хочу добавить еще одну строку в таблицу, чтобы иметь заголовок.Эта строка должна быть только над последними тремя столбцами, примерно так:

      +-----------------+
      |      Header     |
+-----+-----------------+
|  A  |  B  |  C  |  D  |
+-----+-----+-----+-----+
| ... | ... | ... | ... |
+-----+-----+-----+-----+
| ... | ... | ... | ... |
+-----+-----+-----+-----+

Ширина строки заголовка должна соответствовать сумме ширины столбцов A, B и C.Я выиграл, но не могу получить это ... Кто-нибудь может мне помочь?

Спасибо!

1 Ответ

0 голосов
/ 01 декабря 2018

В таблицах Matplotlib отсутствует концепция «colspan» или «rowspan», где ячейки охватывают несколько столбцов или строк.Можно подумать, что клетка может быть увеличена в три раза по сравнению с другими клетками.Однако это может привести к нежелательному сдвигу

enter image description here

У вас есть возможность установить visible_edges дополнительных ячеек, которые вывручную добавьте через .add_cell в верхнюю часть таблицы.

Видимые края могут быть "T": сверху, "B": снизу, "L": слева или "R": вправо.
Затем установка текста в среднюю ячейку делает все этовыглядеть как одна клетка

import matplotlib.pyplot as plt

data = [[1,2,3,4],[6,5,4,3],[1,3,5,1]]

table = plt.table(cellText=data, colLabels=['A', 'B', 'C', 'D'], loc='center', 
                  cellLoc='center', colColours=['#FFFFFF', '#F3CC32', '#2769BD', '#DC3735'])
table.auto_set_font_size(False)
h = table.get_celld()[(0,0)].get_height()
w = table.get_celld()[(0,0)].get_width()

# Create an additional Header
header = [table.add_cell(-1,pos, w, h, loc="center", facecolor="none") for pos in [1,2,3]]
header[0].visible_edges = "TBL"
header[1].visible_edges = "TB"
header[2].visible_edges = "TBR"
header[1].get_text().set_text("Header Header Header Header")

plt.axis('off')
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...