2014-06-21 144 views
0

所以我對錶格的主要問題是用('#EEECE1')顏色完全着色並對其進行格式化,使其周圍沒有白色區域。這樣,我可以很容易地將它插入到ppt中。文檔。沒有它與邊界和額外的空間。表格格式問題

我有以下代碼:

def tables(): 
    data=[[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5]] 
    fig= plt.figure() 
    ax = fig.add_subplot(111) 
    ax.axis('off') 
    rows=['AB','BC','SK','MB'] 
    cols=["Gas", "Wk/Wk", "Yr/Yr","Oil", "Wk/Wk", "Yr/Yr","Bit", "Wk/Wk", "Yr/Yr","Total", "Wk/Wk", "Yr/Yr","Hor", "Wk/Wk", "Yr/Yr","Vert/Dir", "Wk/Wk", "Yr/Yr"] 
    table = ax.table(cellText=data, colLabels=cols,rowLabels=rows, loc='upper center',cellLoc='center') 
    table.auto_set_font_size(True) 
    table.scale(1.5,1.5) 
    plt.savefig(filenameTemplate2, format='png',bbox_inches='tight') 

,給了我這樣的:

enter image description here

有什麼建議?

回答

1

您的問題似乎與軸。你的桌子周圍有一個很大的白色軸線區域,並且png圍繞着軸線而不是靠近桌子的邊緣形成。刪除軸背景顏色有點幫助:

ax.set_axisbgcolor((0,0,0,0)) 

讓你透明的圖形區域。透明bg的要點在於它應該在PPT中保持透明。指定透明度的另一種方法是,當你創建的插曲:

add_subplot(111, axisbg='none') 

那麼你也將相對於圖中的軸位置調整,例如:

ax.set_position([0, 0, 1, 1]) 

,填補了全數字。

單元色可以在創建表時設置的,但它似乎是一個有點笨拙:

tbl=plt.table(cellText=data, cellColours=[["#EEECE1"] * len(data[0])]*len(data)) 

注:至少我的matplotlib在這裏是越野車,看到答案的結尾。


因此,沿着這些路線的東西:

data=[[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5]] 
fig = plt.figure(figsize=(6,2)) 
ax = fig.add_subplot(111, axisbg='none') 
ax.axis('off') 
ax.set_position([0, 0, 1, 1]) 
rows=['AB','BC','SK','MB'] 
cols=["Gas", "Wk/Wk", "Yr/Yr","Oil", "Wk/Wk", "Yr/Yr","Bit", "Wk/Wk", "Yr/Yr","Total", "Wk/Wk", "Yr/Yr","Hor", "Wk/Wk", "Yr/Yr","Vert/Dir", "Wk/Wk", "Yr/Yr"] 
table = ax.table(cellText=data, colLabels=cols, rowLabels=rows, rowColours=['none']*len(data), colColours=['none']*len(data[0]), loc='upper center',cellLoc='center', cellColours=[["none"] * len(data[0])] * len(data)) 
table.auto_set_font_size(True) 
table.scale(1.5, 1.5) 
plt.savefig("test.png", format='png',bbox_inches='tight') 

這將產生具有完全透明背景的表。如果要爲單元格設置背景顏色,請更改cellColours中的「none」。 Kw args rowColourscolColours確定列和行標籤後面的顏色。如果要爲整個圖像設置背景,請在add_subplot的參數axisbg中對其進行更改。

並被警告:似乎matplotlib的不同版本與縮放有點不同。

UPDATE:有可能在table.py工廠功能table一個bug ......看來,如果兩個colColorscolLabels定義,單元偏移爲0,行跳轉到一個錯誤的地方。

的解決方法是一個醜陋的黑客攻擊,但是:

table = ax.table(cellText=data, colLabels=cols, rowLabels=rows, loc='upper center',cellLoc='center') 
for cidx in table._cells: 
    table._cells[cidx].set_facecolor('none') 

會做。table._cells是一個單元字典(它建立在Rectangle類上)。同樣的技巧可以讓你爲單元格表面或邊緣做任何奇特的着色,並且字典鍵是單元格座標。

+0

剛纔嘗試設置行/列的寬度。在表格中做這些的語法是什麼? – carevans88

0

您可以嘗試:.set_backgroundcolor('#EEECE1')您可能需要將其設置在桌面,斧頭或無花果上。

0

有正在進行的一些問題在這裏:

首先,雖然你有ax.axes('off),這只是關閉在軸的線和標籤的繪圖,但不刪除座標軸,這導致桌子下面的所有空白。爲了解決這個問題,我不知道如何完全關閉軸的繪製,但是一個混合是使縱橫比比表小,然後擴大表,但是比例相同(參見下面的示例)。對於顏色,需要注意:1)軸顏色和圖形顏色是不同的(例如,在通常的gui顯示中,圖形顏色是灰色的,軸是白色的);顏色不同, 2)保存圖形中的圖形顏色與顯示的圖形不同,需要直接在savefig中設置。

最後,您可能希望在此使用透明度,而不是您特別要求的顏色(例如,在savefig中設置關鍵字transparent=True),但這取決於您之後對圖形所做的操作,以及不管是否支持透明度,所以我只會回答你問這個問題。

這裏的數字和代碼:

enter image description here

data=[[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5],[10,10,10,5,5,5,2,2,2,4,4,4,4,4,4,5,5,5]] 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.axis('off') 
ax.set_aspect(.1) 
rows=['AB','BC','SK','MB'] 
cols=["Gas", "Wk/Wk", "Yr/Yr","Oil", "Wk/Wk", "Yr/Yr","Bit", "Wk/Wk", "Yr/Yr","Total", "Wk/Wk", "Yr/Yr","Hor", "Wk/Wk", "Yr/Yr","Vert/Dir", "Wk/Wk", "Yr/Yr"] 
table = ax.table(cellText=data, colLabels=cols,rowLabels=rows, loc='upper center',cellLoc='center') 
table.auto_set_font_size(True) 
table.scale(1.5,15.) 
plt.savefig("test.png", format='png',bbox_inches='tight', facecolor='#EEECE1', transparent=True) 
+0

這個答案產生了我正在尋找的結果,但我想設置表格本身的顏色,而不是我正在保存的圖形的背景。有什麼建議麼? – carevans88