Разделите axes.table multiindex на разные столбцы - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь создать кросс-таблицу с несколькими индексами, которые мне нужно распечатать в формате PDF. Я использую matplotlib для печати данных в формате PDF и не могу найти какой-либо метод, который помогает печатать данные непосредственно в формате PDF. Таким образом, используя axes.table для преобразования таблицы данных в таблицу для печати в формате PDF. Тем не менее, 2 индекса в кадре данных объединены в 1 в таблице. См. Вывод ниже

enter image description here

Могут ли эти индексы ('AB C', 'D') разделяться на 2 столбца, например AB C | D Если да, то как?

import matplotlib.pyplot as plt
import matplotlib.backends.backend_pdf
import pandas as pd

pdf = matplotlib.backends.backend_pdf.PdfPages("test.pdf")

fig = plt.figure(figsize=(20, 20))
grid = plt.GridSpec(1, 2, wspace=0.2,width_ratios=[14, 6])
plt.autoscale()
ax0 = fig.add_subplot(grid[0 ,0])
ax1 = fig.add_subplot(grid[0, 1])
df = pd.DataFrame({'country': ['ABC','PQR','XYZ','ABC','PQR'], 'region': ['D','E','F','D','F'], 'month_day':[1,1,1,2,3],'sales' : [100,200,300,500,100]})
table=pd.pivot_table(df, values='sales', index=['country','region'], columns=['month_day'], aggfunc=sum, fill_value=0)

#for printing on pdf
the_table = ax0.table(cellText=table.values,colLabels=table.columns,rowLabels=table.index,loc='center')

pdf.savefig(fig, bbox_inches='tight')
pdf.close() 

1 Ответ

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

Нашел решение после нескольких попыток. table.reset_index (inplace = True) работал в этом случае.

import matplotlib.pyplot as plt
import matplotlib.backends.backend_pdf
import pandas as pd

pdf = matplotlib.backends.backend_pdf.PdfPages("test.pdf")

fig = plt.figure(figsize=(20, 20))
grid = plt.GridSpec(1, 2, wspace=0.2,width_ratios=[14, 6])
plt.autoscale()
ax0 = fig.add_subplot(grid[0 ,0])
ax1 = fig.add_subplot(grid[0, 1])
df = pd.DataFrame({'country': ['ABC','PQR','XYZ','ABC','PQR'], 'region': ['D','E','F','D','F'], 'month_day':[1,1,1,2,3],'sales' : [100,200,300,500,100]})
table=pd.pivot_table(df, values='sales', index=['country','region'], columns=['month_day'], aggfunc=sum, fill_value=0)
table.reset_index(inplace=True)
the_table = ax0.table(cellText=table.values,colLabels=table.columns,colWidths=[0.07,0.06,0.04,0.04,0.04],loc='center')
ax0.axis("off")
ax1.axis("off")
plt.axis("off")
pdf.savefig(fig, bbox_inches='tight')
pdf.close()  

enter image description here

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