Try to set -ve and +ve value and zero as Ycenter
Please check my code and my graph below. image below 
ForEach(0..<stack.count, id: \.self) { index in
if let xValue = stack[index].x ,
let yValue = stack[index].yValues?[0].value,
let hexaString = stack[index].yValues?[0].color {
BarMark(
x: .value("x", "\(xValue)"),
y: .value("y", "\(yValue)")
)
.foregroundStyle(Color(hex: hexaString))
}
}

You are plotting the y axes as categorical data (i.e. strings), which makes all the bars rectangles with the same size.
If the x and y values are numerical, just plot them as numerical data.
To fix y=0 at the centre, you can use
chartYScaleto modify the range of the y axis.Here is a full example:
Output: