You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Charts如何设置柱状图固定柱宽?

在Swift Charts中固定柱状图柱宽的解决方案

Swift Charts 默认会根据数据量自动分配柱宽,要实现固定尺寸的柱子,核心是手动控制BarMark的宽度,并配合横向滚动避免数据过多时的挤压。以下是可直接运行的完整示例:

完整代码示例

import SwiftUI
import Charts

struct SalesData: Identifiable {
    let id = UUID()
    let category: String
    let value: Double
}

struct FixedWidthBarChartView: View {
    // 自定义固定柱宽(单位:SwiftUI 点)
    private let fixedBarWidth: CGFloat = 30
    
    // 测试数据,可修改数量验证效果
    let testData: [SalesData] = [
        SalesData(category: "产品A", value: 120),
        SalesData(category: "产品B", value: 90),
        SalesData(category: "产品C", value: 150),
        SalesData(category: "产品D", value: 85),
        SalesData(category: "产品E", value: 110)
        // 可继续添加更多数据测试滚动效果
    ]
    
    var body: some View {
        Chart(testData) { item in
            BarMark(
                x: .value("产品分类", item.category),
                y: .value("销售额", item.value)
            )
            // 核心:设置固定柱宽
            .barWidth(fixedBarWidth)
            .foregroundStyle(.indigo)
        }
        .chartXAxis {
            AxisMarks(position: .bottom) { index in
                AxisGridLine()
                AxisTick()
                AxisLabel(alignment: .center, centered: true) {
                    // 旋转标签避免数据过多时重叠
                    Text(testData[index.index].category)
                        .rotationEffect(.degrees(90))
                        .frame(height: 70)
                }
            }
        }
        // 启用横向滚动,保证数据过多时柱宽不变
        .frame(height: 320)
        .scrollableAxes(.horizontal)
        .padding(.horizontal)
    }
}

#Preview {
    FixedWidthBarChartView()
}

关键说明

  • 固定柱宽:通过.barWidth(fixedBarWidth)直接指定柱子的宽度,单位是SwiftUI的点,无论数据量多少,柱子尺寸都会保持设定值。
  • 横向滚动适配:添加.scrollableAxes(.horizontal)后,当数据数量超出图表宽度时,图表会自动支持横向滚动,避免柱子被挤压变窄。
  • 标签优化:旋转X轴标签是为了避免数据过多时标签重叠,你可以根据需求调整旋转角度或标签样式。

如果需要进一步控制柱子之间的间距,可以结合chartXScale调整X轴的 padding,例如:

.chartXScale(range: .plotDimension(padding: fixedBarWidth * 0.5))

这个设置会在柱子两侧添加固定的间距,让布局更均匀。

内容的提问来源于stack exchange,提问作者Antony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:33:16