我希望格式化一个表的一列,但是当遍历这些行时,每次迭代后列宽的宽度都会发生变化。
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
的大小。
不幸的是,经过迭代:
for i in range(13):
cell_dict[(i,1)].set_width(0.3)
看起来单元格宽度增加,导致类似这样的事情:
对于为什么会发生这种情况的任何建议,或者调整宽度的替代解决方案都将非常感激!
答案 0 :(得分:9)
除了@jma答案,我发现表方法.auto_set_column_widths(col=<list of col indices>)
非常有用,尤其是与.auto_set_font_size(False)
结合使用时。下面是示例用法:
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()
答案 1 :(得分:4)
要设置列的宽度,请在表函数中使用colWidth。它接受每列的宽度列表 - 它们可以全部相同或不同。
table = plt.table(cellText=cell_text, cellColours=colors[0],
rowColours=colors[1], rowLabels=row_labels,
colColours=colors[2], colLabels=columns,
colWidths=[0.3 for x in columns],
bbox=[0.0, -1.3, 1.0, 1.0], cellLoc='center')
答案 2 :(得分:1)
尝试我的plot_table版本
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.\""}]
df = pd.DataFrame(data)
data = np.vstack((df.columns.values, df.values.astype(str)))
plot_table(data);
点击here获得plot_table
源代码。