Matplotlib表格式化列宽 [英] Matplotlib table formatting column width

查看:189
本文介绍了Matplotlib表格式化列宽的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望格式化表的一列,但是当遍历行时,它的宽度似乎在每次迭代后都会改变.

I wish to format one column of a table but when iterating through the rows it appears the width of the column width changes after each iteration.

def p_create_table(self, events, dates, rows, columns, portfolio):
    """
    :param events: Dict - {Date:Event} where Event is a String identifying
    what event happened
    :param dates: List - Dates of events
    :param rows: Int - number of Dates (rows) to create for the table
    :param columns: List - Column headers
    :param portfolio: Dataframe - Portfolio with calculated totals and returns
    :return:
    """
    cell_text = self.p_create_cell_text(events, dates, portfolio)
    cell_text.pop(0)
    row_labels = self.p_create_row_labels(rows)
    row_labels.pop(len(row_labels) - 1)
    colors = self.p_set_table_colors(row_labels)

    table = plt.table(cellText=cell_text, cellColours=colors[0],
              rowColours=colors[1], rowLabels=row_labels,
              colColours=colors[2], colLabels=columns,
              bbox=[0.0, -1.3, 1.0, 1.0], cellLoc='center')

    table.auto_set_font_size(False)
    table.set_fontsize(9)
    table.scale(2, 2)

    cell_dict = table.get_celld()
    for i in range(13):
        cell_dict[(i,1)].set_width(0.3)

下面是调整大小之前表格的图像.快照是在执行 table.set_fontsize(9)行之后拍摄的.我想调整第二列 Event 的大小.

Below is an image of the table BEFORE the resizing. The snapshot was taken after line table.set_fontsize(9) was executed. I would like to re-size the second column Event.

不幸的是,经过以下迭代:

Unfortunately, after ever iteration of:

for i in range(13):
    cell_dict[(i,1)].set_width(0.3)

看起来像单元格宽度增加了,结果是这样的:

it looks like the cell width increases, resulting in something like this:

对于为什么会发生这种情况的任何建议,或者对宽度进行调整的替代解决方案,将不胜感激!

Any suggestions on why this could be happening, or an alternative solution to adjusting the width would be much appreciated!

推荐答案

除了@jma答案,我发现了表方法 .auto_set_column_widths(col =< col索引列表>)非常有帮助,尤其是与 .auto_set_font_size(False)结合使用时.以下是示例用法:

In addition to @jma answer, I found the table method .auto_set_column_widths(col=<list of col indices>) to be very helpful, especially in conjunction with .auto_set_font_size(False). Example use below:

from matplotlib import pyplot as plt
import pandas as pd
# Create some example data
data = [{"Movie": "Happy Gilmore", "Lead Actor": "Adam Sandler" , "Year": "1996", 
              "Plot": "An ice hockey star takes up golfing.", 
              "Quotes": "\"Just give it a little tappy. Tap tap taparoo.\""}]
dff = pd.DataFrame(data)
fig, ax = plt.subplots(3,1, figsize=(10,4))

tab0 = ax[0].table(cellText=dff.values, colLabels=dff.columns, loc='center', cellLoc='center')
ax[0].set_title("Default")
tab1 = ax[1].table(cellText=dff.values, colLabels=dff.columns, loc='center', cellLoc='center')
ax[1].set_title("Font AutoSize off")
tab2 = ax[2].table(cellText=dff.values, colLabels=dff.columns, loc='center', cellLoc='center')
ax[2].set_title("Column Width Auto Set, Font AutoSize off")
[a.axis("off") for a in ax]
[t.auto_set_font_size(False) for t in [tab1, tab2]]
[t.set_fontsize(8) for t in [tab1, tab2]]

tab2.auto_set_column_width(col=list(range(len(dff.columns)))) # Provide integer list of columns to adjust
plt.show()

这篇关于Matplotlib表格式化列宽的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆