swiftui - 使用 SwiftUI 和图表库合并两个 xy 图
问题描述
我正在使用 SwiftUI 和图表库(即导入图表)
生产一条单线就可以了。但是我想在图表上绘制 2 条单独的线
但无法弄清楚如何做到这一点
我用以下行调用结构:
myLineChartSwiftUI(myXminny: self.$myXminny, myXmaxy: self.$myXmaxy)
我添加了第二行设置(即 dataPoints2、set2、color2 等)
我到底如何结合两条线返回情节?
非常感谢您的帮助
我的第一个 swiftUI 和第一个图表程序:
struct myLineChartSwiftUI : UIViewRepresentable
{
@Binding var myXminny : Double
@Binding var myXmaxy : Double
let lineChart = LineChartView()
func makeUIView(context: UIViewRepresentableContext<myLineChartSwiftUI>) -> LineChartView {
setUpChart()
return lineChart
}
func updateUIView(_ uiView: LineChartView, context: UIViewRepresentableContext<myLineChartSwiftUI>) {
}
func setUpChart() {
let dataSets = [getLineChartDataSet()]
let data = LineChartData(dataSets: dataSets)
lineChart.data = data
}
func getChartDataPoints(sessions: [Double], accuracy: [Double]) -> [ChartDataEntry] {
var dataPoints: [ChartDataEntry] = []
for count in (0..<sessions.count) {
dataPoints.append(ChartDataEntry.init(x: Double(sessions[count]), y: accuracy[count]))
}
return dataPoints
}
func getLineChartDataSet() -> LineChartDataSet {
let dataPoints = getChartDataPoints(sessions: [myXminny,myXmaxy], accuracy: [myXminny,myXmaxy])
let set = LineChartDataSet(entries: dataPoints, label: "DataSet")
set.lineWidth = 2
set.drawValuesEnabled = false
set.drawCirclesEnabled = false
//set.circleRadius = 4
let color = ChartColorTemplates.vordiplom()[4]
set.setColor(color)
let dataPoints2 = getChartDataPoints(sessions: [myXminny/2,myXmaxy/2], accuracy: [myXminny/2,myXmaxy/2])
let set2 = LineChartDataSet(entries: dataPoints2, label: "DataSet2")
set2.lineWidth = 2
set2.drawValuesEnabled = false
set2.drawCirclesEnabled = false
let color2 = ChartColorTemplates.vordiplom()[4]
set2.setColor(color2)
let data = LineChartData(dataSets: [set, set2])
return set
}
}
解决方案
对于那些对解决方案感兴趣的人,代码如下:
import SwiftUI
import Charts
struct GraphSwiftUI: View {
var body: some View {
GeometryReader { p in
VStack {
LineChartSwiftUI()
//use frame to change the graph size within your SwiftUI view
.frame(width: p.size.width, height: p.size.width, alignment: .center)
}
}
}
}
struct LineChartSwiftUI: UIViewRepresentable {
let lineChart = LineChartView()
func makeUIView(context: UIViewRepresentableContext<LineChartSwiftUI>) -> LineChartView {
setUpChart()
return lineChart
}
func updateUIView(_ uiView: LineChartView, context: UIViewRepresentableContext<LineChartSwiftUI>) {
}
func setUpChart() {
let dataSets = [getLineChartDataSet()]
let data = LineChartData(dataSets: dataSets)
}
func getChartDataPoints(sessions: [Int], accuracy: [Double]) -> [ChartDataEntry] {
var dataPoints: [ChartDataEntry] = []
for count in (0..<sessions.count) {
dataPoints.append(ChartDataEntry.init(x: Double(sessions[count]), y: accuracy[count]))
}
return dataPoints
}
func getLineChartDataSet() -> LineChartDataSet {
let dataPoints = getChartDataPoints(sessions: [0,1,5], accuracy: [0, 2, 8])
let set = LineChartDataSet(entries: dataPoints, label: "DataSet")
set.lineWidth = 3
let color = ChartColorTemplates.vordiplom()[4]
set.setColor(color)
let dataPoints2 = getChartDataPoints(sessions: [0,1,5], accuracy: [50,10,15])
let set2 = LineChartDataSet(entries: dataPoints2, label: "DataSet2")
set2.lineWidth = 2
set2.drawValuesEnabled = true
set2.drawCirclesEnabled = true
let color2 = ChartColorTemplates.vordiplom()[3]
set2.setColor(color2)
let data = LineChartData(dataSets: [set, set2])
lineChart.data = data
return set
}
}
struct GraphSwiftUI_Previews: PreviewProvider {
static var previews: some View {
GraphSwiftUI()
}
}
推荐阅读
- node.js - 在 Node.js Express 中禁用 TLS 1.0 和 1.1 或仅使用 TLS 1.2 及更高版本
- javascript - React - 向下滚动页面时缩小导航图像
- java - 为我的所有 REST 控制器方法请求添加 @Around 建议后,不要返回任何 JSON 数据
- javascript - 为什么当 AST 已经知道该值时此代码返回 undefined
- mysql - MySQL ORDER BY 和 LIMIT 与存储过程中的变量
- go - 如何从 Cloud Run 访问其他 GCP 服务
- visual-studio-code - 查找并替换所有不在引号中的匹配项
- windows - 远程检索 Windows Defender 状态
- javascript - 使用 JavaScript 更新测验跟踪器答案 DIV
- python - 填充字典的输出与代码块中的打印语句不同