Форматирование Dataframe в таблицу, хранящуюся в формате PNG / JPEG - PullRequest
0 голосов
/ 19 марта 2020

У меня есть DataFrame, и я хочу вставить его в формате PNG / JPEG в Powerpoint. Я хочу, чтобы таблица имела некоторое форматирование. Я пытался с Matplotlib, и плотно, но я не приближаюсь к конечному результату.

Я пытался:

import plotly.graph_objects as go
import pandas as pd

df = full_table
header_color = '#1D97FF'

fig = go.Figure(data=[go.Table(

    header=dict(values=list(df.columns),
                fill_color=header_color,
                align='left', 
                line_color='darkslategray', 
                font=dict(color='white', size=11)),

    cells=dict(values=[df.index, df.budget_revenue, df.budget_net_revenue, df.gross_margin,df.new_net_mrr,df.actual_shipments],
               fill_color=['white'],
               align='left', line_color='darkslategray', font=dict(color='black', size=11)))                   
])

fig.write_image("fig1.png")
fig.show()

И я пытался:

import matplotlib.pyplot as plt
# Prepare table

df = full_table
hc = '#1D97FF'

columns=full_table.columns.to_list()
index=full_table.index.to_list()
values=full_table.values.tolist()
# Add a table at the bottom of the axes
colors = [["#56b5fd","w","w","w","w","w","w"],[ "#1ac3f5","w","w","w","w","w","w"]]


# Add a table at the bottom of the axes
colors = [["w","w","w","w","w","w"],[ "w","w","w","w","w","w"],
         [ "w","w","w","w","w","w"],[ "w","w","w","w","w","w"],
         [ "w","w","w","w","w","w"],[ "w","w","w","w","w","w"],
         [ "w","w","w","w","w","w"],[ hc,hc,hc,hc,hc,hc]]
colors1 =  ["w","w","w","w","w","w","w",hc]
colors2 = [ hc,hc,hc,hc,hc,hc]

fig, ax = plt.subplots()

ax.axis('off')
the_table = ax.table(cellText=values,cellColours=colors,
                     colLabels=columns,colColours=colors2,rowLabels=index, rowColours=colors1,loc='center')

plt.show()

Первый вариант выглядит уже вполне нормально. Некоторые незначительные изменения, но я не могу получить нижний ряд, чтобы стать синим. И заголовки столбцов не подходят. Второй вариант - размытый, верхний левый угол остается пустым, и нужно сделать гораздо больше редактирования шрифтов, с чем мне тоже не удалось.

Я просто использую не нужные библиотеки. Застрял на простом форматировании, которое выполняется в Excel за минуту.

Вот как это должно выглядеть:

Outcome

1 Ответ

0 голосов
/ 22 марта 2020

Вы должны разделить таблицу на три логические части:

  1. заголовок
  2. "центральный" контент
  3. последняя строка

Это код:

import plotly.graph_objects as go
import pandas as pd

data = [['Jan-20', 1.0, 1, 4.0, 0, 250000.0],
        ['Jan-20', 2.0, 2, 4.0, 0, 250000.0],
        ['Jan-20', 3.0, 3, 4.0, 0, 250000.0],
        ['Jan-20', 3.0, 3, 4.0, 0, 250000.0],
        ['Jan-20', 3.0, 3, 4.0, 0, 250000.0],
        ['Jan-20', 3.0, 3, 4.0, 0, 250000.0],
        ['Jan-20', 4.0, 4, 4.0, 0, 250000.0],
        ['Jan-20', 5, 232, 114, 2312, 123]]
index = ['NL', 'DE', 'AT', 'FR', 'BE', 'ES', 'IT', 'Global']
columns = ['Months', 'budget_rev', 'budget_net_rev', 'gross_margin', 'new_net_mrr', 'act_shipments']
df = pd.DataFrame(data, index=index, columns=columns) 

df.reset_index(inplace=True)
n_cols = len(columns)
n_rows = len(data)

header_c = 'dodgerblue'
rows_c = ['white']*(n_rows-1)

rows_c.extend(['dodgerblue'])

rows_f = ['darkslategray']*(n_rows-1)
rows_f.extend(['white'])

fig = go.Figure(data=[go.Table(columnwidth = [80]*(n_cols+1),
                               header=dict(values=list(df.columns),
                                           line_color='darkslategray',
                                           fill_color=header_c,
                                           font=dict(color='white',
                                                     size=12)),
                               cells=dict(values=list(df.values.transpose()),
                                          line_color='darkslategray',
                                          fill_color = [rows_c*n_cols],
                                          font = dict(color = [rows_f*n_cols],
                                                      size = 12)))])

fig.show()

и вы получите:

enter image description here

...