2016-05-17 70 views
1

喜是可能使matplotlib表有一個「雙報頭」像這樣 (介意虛線)雙頭Matplotlib表

  ---------------------------------------- 
      | Feb Total  |  YTD Total  | 
      ---------------------------------------- 
      | 2014|2015  | 2014/2015| 2015/2016 | 
-------------------------------------------------- 
|VVI-ID | 12 | 20  | 188  | 169  | 
-------------------------------------------------- 
|TDI-ID | 34 | 45  | 556  | 456  | 

回答

0

您可以通過其他表沒有數據做作爲標題。也就是說,您創建了空表,其列標籤將作爲表格的標題。我們來考慮this演示示例。首先,添加表格header_0header_1。第二,正確的標題和表的參數bbox正確定位所有表。由於表格是重疊的,所以包含數據的表格應該是最後一個。

import numpy as np 
import matplotlib.pyplot as plt 


data = [[ 66386, 174296, 75131, 577908, 32015], 
     [ 58230, 381139, 78045, 99308, 160454], 
     [ 89135, 80552, 152558, 497981, 603535], 
     [ 78415, 81858, 150656, 193263, 69638], 
     [ 139361, 331509, 343164, 781380, 52269]] 

columns = ('Freeze', 'Wind', 'Flood', 'Quake', 'Hail') 
rows = ['%d year' % x for x in (100, 50, 20, 10, 5)] 

values = np.arange(0, 2500, 500) 
value_increment = 1000 

# Get some pastel shades for the colors 
colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows))) 
n_rows = len(data) 

index = np.arange(len(columns)) + 0.3 
bar_width = 0.4 

# Initialize the vertical-offset for the stacked bar chart. 
y_offset = np.array([0.0] * len(columns)) 

# Plot bars and create text labels for the table 
cell_text = [] 
for row in range(n_rows): 
    plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row]) 
    y_offset = y_offset + data[row] 
    cell_text.append(['%1.1f' % (x/1000.0) for x in y_offset]) 
# Reverse colors and text labels to display the last value at the top. 
colors = colors[::-1] 
cell_text.reverse() 

# Add headers and a table at the bottom of the axes 
header_0 = plt.table(cellText=[['']*2], 
        colLabels=['Extra header 1', 'Extra header 2'], 
        loc='bottom', 
        bbox=[0, -0.1, 0.8, 0.1] 
        ) 

header_1 = plt.table(cellText=[['']], 
        colLabels=['Just Hail'], 
        loc='bottom', 
        bbox=[0.8, -0.1, 0.2, 0.1] 
        ) 

the_table = plt.table(cellText=cell_text, 
         rowLabels=rows, 
         rowColours=colors, 
         colLabels=columns, 
         loc='bottom', 
         bbox=[0, -0.35, 1.0, 0.3] 
        ) 

# Adjust layout to make room for the table: 
plt.subplots_adjust(left=0.2, bottom=-0.2) 

plt.ylabel("Loss in ${0}'s".format(value_increment)) 
plt.yticks(values * value_increment, ['%d' % val for val in values]) 
plt.xticks([]) 
plt.title('Loss by Disaster') 

plt.show() 

enter image description here

如果額外的標頭是對稱的或結合的「正常」頭數量相等,所有你需要做的是增加一個額外的頭表和這樣的數據表的正確bbox(同例如用已刪除的列):

header = plt.table(cellText=[['']*2], 
         colLabels=['Extra header 1', 'Extra header 2'], 
         loc='bottom' 
        ) 

the_table = plt.table(cellText=cell_text, 
         rowLabels=rows, 
         rowColours=colors, 
         colLabels=columns, 
         loc='bottom', 
         bbox=[0, -0.35, 1.0, 0.3] 
        ) 

enter image description here