Python XlsxWriter - 新增圖表



Excel 最重要的功能之一是將資料轉換為圖表。圖表是資料的視覺表示。可以透過圖表選單生成不同型別的圖表。

Insert Chart

為了以程式設計方式生成圖表,XlsxWriter 庫有一個 Chart 類。它的物件是透過呼叫 Workbook 類的add_chart()方法獲得的。然後,它使用add_series()方法與工作表中的資料範圍關聯。然後,使用其insert_chart()方法將圖表物件插入工作表。

示例

下面是顯示簡單柱狀圖的程式碼。

import xlsxwriter
wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()
chart = wb.add_chart({'type': 'column'})

data = [
   [10, 20, 30,  40,  50],
   [20, 40, 60,  80, 100],
   [30, 60, 90, 120, 150],
]
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])

chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})

worksheet.insert_chart('B7', chart)

wb.close()

輸出

生成的圖表嵌入在工作表中,顯示如下:

Add Series

add_series()方法具有以下附加引數:

  • Values - 這是最重要的屬性,是必選選項。它將圖表與其顯示的工作表資料鏈接。

  • Categories - 這設定圖表類別標籤。如果沒有給出,圖表將只假設從 1…n 的順序序列。

  • Name - 為序列設定名稱。名稱顯示在公式欄中。

  • Line - 設定序列線型別屬性,例如顏色和寬度。

  • Border - 設定序列的邊框屬性,例如顏色和樣式。

  • Fill - 設定序列的純色填充屬性,例如顏色。

  • Pattern - 設定序列的圖案填充屬性。

  • Gradient - 設定序列的漸變填充屬性。

  • data_labels - 為序列設定資料標籤。

  • Points - 為序列中的各個點設定屬性。

在下面的示例中,在新增資料序列時,定義了 value 和 categories 屬性。示例資料如下:

# Add the worksheet data that the charts will refer to.
headings = ['Name', 'Phy', 'Maths']
data = [
   ["Jay",   30, 60],
   ["Mohan", 40, 50],
   ["Veeru", 60, 70],
]

建立圖表物件後,第一個資料序列對應於 name 屬性值為 phy 的列。第一列中的學生姓名用作類別。

chart1.add_series({
   'name': '=Sheet1!$B$1',
   'categories': '=Sheet1!$A$2:$A$4',
   'values': '=Sheet1!$B$2:$B$4',
})

第二個資料序列也參考 A 列中的姓名作為類別,以及標題為 Maths 的 C 列作為 values 屬性。

chart1.add_series({
   'name': ['Sheet1', 0, 2],
   'categories': ['Sheet1', 1, 0, 3, 0],
   'values': ['Sheet1', 1, 2, 3, 2],
})

示例

這是完整的示例程式碼:

import xlsxwriter
wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()
chart1 = wb.add_chart({'type': 'column'})

# Add the worksheet data that the charts will refer to.
headings = ['Name', 'Phy', 'Maths']
data = [
   ["Jay",   30, 60],
   ["Mohan", 40, 50],
   ["Veeru", 60, 70],
]

worksheet.write_row(0,0, headings)
worksheet.write_row(1,0, data[0])
worksheet.write_row(2,0, data[1])
worksheet.write_row(3,0, data[2])

chart1.add_series({
   'name': '=Sheet1!$B$1',
   'categories': '=Sheet1!$A$2:$A$4',
   'values': '=Sheet1!$B$2:$B$4',
})

chart1.add_series({
   'name': ['Sheet1', 0, 2],
   'categories': ['Sheet1', 1, 0, 3, 0],
   'values': ['Sheet1', 1, 2, 3, 2],
})

worksheet.insert_chart('B7', chart1)

wb.close()

輸出

工作表和基於它的圖表顯示如下:

Add Series1

add_series() 方法也有 data_labels 屬性。如果設定為 True,則繪製資料點的值將顯示在每列的頂部。

示例

以下是 add_series() 方法的完整程式碼示例:

import xlsxwriter
wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()
chart1 = wb.add_chart({'type': 'column'})

# Add the worksheet data that the charts will refer to.
headings = ['Name', 'Phy', 'Maths']
data = [
   ["Jay",   30, 60],
   ["Mohan", 40, 50],
   ["Veeru", 60, 70],
]

worksheet.write_row(0,0, headings)
worksheet.write_row(1,0, data[0])
worksheet.write_row(2,0, data[1])
worksheet.write_row(3,0, data[2])

chart1.add_series({
   'name': '=Sheet1!$B$1',
   'categories': '=Sheet1!$A$2:$A$4',
   'values': '=Sheet1!$B$2:$B$4',
   'data_labels': {'value':True},
})
chart1.add_series({
   'name': ['Sheet1', 0, 2],
   'categories': ['Sheet1', 1, 0, 3, 0],
   'values': ['Sheet1', 1, 2, 3, 2],
   'data_labels': {'value':True},
})
worksheet.insert_chart('B7', chart1)

wb.close()

輸出

執行程式碼並開啟Hello.xlsx柱狀圖現在顯示了資料標籤。

Hello Xlsx

資料標籤可以顯示在所有型別的圖表中。資料標籤的位置引數可以設定為頂部、底部、左側或右側。

XlsxWriter 支援以下型別的圖表:

  • Area - 建立一個區域(填充線)樣式圖表。

  • Bar - 建立一個條形樣式(轉置直方圖)圖表。

  • Column - 建立一個柱狀樣式(直方圖)圖表。

  • Line - 建立一個折線樣式圖表。

  • Pie - 建立一個餅圖樣式圖表。

  • Doughnut - 建立一個環形圖樣式圖表。

  • Scatter - 建立一個散點圖樣式圖表。

  • Stock - 建立一個股票樣式圖表。

  • Radar - 建立一個雷達圖樣式圖表。

許多圖表型別也有子型別。例如,柱狀圖、條形圖、區域圖和折線圖的子型別為堆疊和percent_stacked。可以在add_chart()方法中給出 type 和 subtype 引數。

workbook.add_chart({'type': column, 'subtype': 'stacked'})

圖表使用其insert_chart()方法嵌入到工作表中,該方法採用以下引數:

worksheet.insert_chart(location, chartObj, options)

options引數是一個字典,用於配置圖表的位和比例。選項屬性及其預設值為:

{
   'x_offset':        0,
   'y_offset':        0,
   'x_scale':         1,
   'y_scale':         1,
   'object_position': 1,
   'description':     None,
   'decorative':      False,
}

x_offsety_offset值以畫素為單位,而x_scaley_scale值用於水平/垂直縮放圖表。description欄位可用於為圖表指定描述或“替代文字”字串。

decorative引數用於將圖表標記為裝飾性的,因此對於自動螢幕閱讀器來說是不提供資訊的。它必須設定為 True/False。最後,object_position引數控制圖表的物體定位。它允許以下值:

  • 1 - 與單元格一起移動和調整大小(預設值)。

  • 2 - 移動但不與單元格一起調整大小。

  • 3 - 不與單元格一起移動或調整大小。

廣告
© . All rights reserved.