Hi! I've been messing with this for a couple of hours with no progress. Basically I want a barmark chart with two bars on the X axis comparing 'visits' and 'revenue'. But I get a single barmark with both Visits and Revenue.
What am I doing wrong here?
//
// chartsLarge.swift
//
import SwiftUI
import Charts
struct Item: Identifiable {
let id = UUID()
let month: String
let revenue: Int
let visits: Int
}
var myItems = [Item]()
struct largeRevenueVisitsChart: View {
let items: [Item] = [
Item( month: eAData.eaMonthName[12],
revenue: Int(eAData.eaRevenue[12]),
visits: Int(eAData.eaVisits[12])),
Item( month: eAData.eaMonthName[11],
revenue: Int(eAData.eaRevenue[11]),
visits: Int(eAData.eaVisits[11])),
Item( month: eAData.eaMonthName[10],
revenue: Int(eAData.eaRevenue[10]),
visits: Int(eAData.eaVisits[10])),
Item( month: eAData.eaMonthName[9],
revenue: Int(eAData.eaRevenue[9]),
visits: Int(eAData.eaVisits[9])),
Item( month: eAData.eaMonthName[8],
revenue: Int(eAData.eaRevenue[8]),
visits: Int(eAData.eaVisits[8])),
Item( month: eAData.eaMonthName[7],
revenue: Int(eAData.eaRevenue[7]),
visits: Int(eAData.eaVisits[7])),
Item( month: eAData.eaMonthName[6],
revenue: Int(eAData.eaRevenue[6]),
visits: Int(eAData.eaVisits[6])),
Item( month: eAData.eaMonthName[5],
revenue: Int(eAData.eaRevenue[5]),
visits: Int(eAData.eaVisits[5])),
Item( month: eAData.eaMonthName[4],
revenue: Int(eAData.eaRevenue[4]),
visits: Int(eAData.eaVisits[4])),
Item( month: eAData.eaMonthName[3],
revenue: Int(eAData.eaRevenue[3]),
visits: Int(eAData.eaVisits[3])),
Item( month: eAData.eaMonthName[2],
revenue: Int(eAData.eaRevenue[2]),
visits: Int(eAData.eaVisits[2])),
Item( month: eAData.eaMonthName[1],
revenue: Int(eAData.eaRevenue[1]),
visits: Int(eAData.eaVisits[1]))
]
let currencyDisplay = Locale.current.currencySymbol
let gradient = Gradient(colors: [.black, .pink])
var body: some View {
NavigationView {
VStack() {
GroupBox (" Revenue & Visits") {
Chart {
// Revenue chart
ForEach(items) { items in
let itemsRevenueCurrency = ("\(String(describing: currencyDisplay!))")
let itemsRevenueValue = ("\(items.revenue)")
let formattedRevenueValue = itemsRevenueCurrency + itemsRevenueValue
BarMark(
x: .value("Revenue", items.revenue),
y: .value("Month", items.month)
)
.foregroundStyle(
.linearGradient(
colors: [.mint, .green],
startPoint: .topTrailing,
endPoint: .topLeading
)
)
.opacity(mobVariables.mobOpacity)
.cornerRadius(10)
// Visits chart
BarMark(
x: .value("Visits", items.visits),
y: .value("Month", items.month)
)
.foregroundStyle(by: .value("Visits", "Month"))
// .foregroundStyle(Color.purple)
.annotation(position: .overlay, alignment: .trailing) {
Text(" \(items.visits, format: .number.precision(.fractionLength(0)))")
.foregroundColor(.black)
.font(.system(size: 13, weight: .semibold, design: .rounded))
}
.interpolationMethod(.stepCenter)
.lineStyle(StrokeStyle(lineWidth: 5))
}
}
}
}
}
}
}