(Swift) Chart 圓餅圖 進階操作

目的:學習 PieChartView 細部的操作

  • 禁用圓盤旋轉
  • 修改點選的扇形區的延伸區
  • 設置圓餅圖中間的顯示文字
  • 設置扇區的間隔
  • 修改字體樣式和顯示的格式
  • 將數值轉換成百分比顯示
  • 顯示實心圓餅圖
  • 標籤與數值顯示位置
  • 底部標籤問題

環境:OSX 13.2 + Xcode 11.3 + Charts 4.1.0

基本的 Charts 操作可以參考這一篇

禁用圓盤旋轉

    ...


func setChart(dataPoints: [String], values: [Double]) {
...

// 禁用圓表旋轉
myView.rotationEnabled = false

修改點選的扇形區的延伸區

...

func setChart(dataPoints: [String], values: [Double]) {
...

// 改變扇區延伸長度
piechartdataset.selectionShift = 0

設置圓餅圖中間的顯示文字

...

func setChart(dataPoints: [String], values: [Double]) {
...

// 設置圓餅圖中間的顯示文字
myView.centerText = "temperature"

設置扇區的間隔


...

func setChart(dataPoints: [String], values: [Double]) {
...

// 設置扇區的間隔
piechartdataset.sliceSpace = 3

修改字體樣式和顯示的格式

...

func setChart(dataPoints: [String], values: [Double]) {
...

// 字體修改
piechartdata.setValueFont(.systemFont(ofSize: 13, weight: .medium))

// 字體顏色修改
piechartdata.setValueTextColor(.black)

// 自定義格式
let formatter = NumberFormatter()
// 數字前的單位符號
formatter.positivePrefix = "$"
piechartdata.setValueFormatter(DefaultValueFormatter(formatter: formatter))

將數值轉換成百分比顯示

...

func setChart(dataPoints: [String], values: [Double]) {
...

// 將數值轉為百分比
myView.usePercentValuesEnabled = true

//数值百分比格式化显示
let pFormatter = NumberFormatter()
// 設置 numberStyle 屬性為 .percent,以將數字轉換為百分比格式
pFormatter.numberStyle = .percent
// 設置 maximumFractionDigits 屬性為 1,以限制小數點後的位數為 1
pFormatter.maximumFractionDigits = 1
// multiplier 屬性被設置為 1,以將數字轉換為百分比
pFormatter.multiplier = 1
// 設置 percentSymbol 屬性為 "%",以在百分比值後添加百分比符號
pFormatter.percentSymbol = "%"
// 使用 setValueFormatter 方法來將格式化器應用於餅圖的數據中
// 使用 DefaultValueFormatter 類創建一個新的格式化器,並將其初始化為 pFormatter
piechartdata.setValueFormatter(DefaultValueFormatter(formatter: pFormatter))

顯示實心圓餅圖

...

func setChart(dataPoints: [String], values: [Double]) {
...

// 將餅圖中心的孔半徑設置為 0,以使中心部分留空
myView.holeRadiusPercent = 0
// 設置餅圖中心透明圓的半徑為餅圖半徑的 0.25 倍,以提供視覺效果
myView.transparentCircleRadiusPercent = 0.25
// 禁用圓餅圖中心留空
myView.drawHoleEnabled = false

標籤與數值顯示位置

...

func setChart(dataPoints: [String], values: [Double]) {
...

// 百分比在內,標籤在外
piechartdataset.xValuePosition = .outsideSlice
piechartdataset.yValuePosition = .insideSlice

底部標籤位置

--

--