当前位置: 首页 > 面试题库 >

如何在iOS图表中的X轴上添加字符串?

陆绍辉
2023-03-14
问题内容

使用新版本时,我在创建一些图形时遇到了一些麻烦,以前的代码是:

func setChart(dataPoints: [String], values: [Double]) {
    var dataEntries: [BarChartDataEntry] = []

    for i in 0..<dataPoints.count {
        let dataEntry = BarChartDataEntry(value: values[i], xIndex: i)
        dataEntries.append(dataEntry)
    }

    let chartDataSet = BarChartDataSet(yVals: dataEntries, label: "Units Sold")
    let chartData = BarChartData(xVals: months, dataSet: chartDataSet)
    barChartView.data = chartData
}

您可以使用以下行来传递值,例如,月份数组:

let chartData = BarChartData(xVals: months, dataSet: chartDataSet)

新版本发布后,用于实现相同图形的代码为:

func setChart(dataPoints: [String], values: [Double]) {          
    var dataEntries: [BarChartDataEntry] = []

    for i in 0..<dataPoints.count {
        let dataEntry = BarChartDataEntry(x: Double(i+2), y:values[i], data: months )
        dataEntries.append(dataEntry)
    }

    let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold")

    let chartData = BarChartData()
    chartData.addDataSet(chartDataSet)
    barChartView.data = chartData
}

我尝试了几个小时,但找不到修改X轴值的方法,希望有人可以帮助我,谢谢!


问题答案:

我找到了解决方案,也许另一个解决方案可以更好地解决此问题,而无需创建新类,这就是我发现的:

首先,您需要创建一个新类,该类将是您的格式化程序类,并添加IAxisValueFormater接口,然后使用stringForValue方法自定义新值,它需要两个参数,第一个是实际值(您可以看到它像索引),第二个是该值所在的轴。

import UIKit
import Foundation
import Charts

@objc(BarChartFormatter)
public class BarChartFormatter: NSObject, IAxisValueFormatter
{
  var months: [String]! = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

  public func stringForValue(value: Double, axis: AxisBase?) -> String 
  {
    return months[Int(value)]
  }   
}

现在,在文件中,在setChart()函数开始时,您必须创建两个变量,一个用于格式化程序类,一个用于轴类:

let formato:BarChartFormatter = BarChartFormatter()
let xaxis:XAxis = XAxis()

接下来,在for in循环的末尾继续操作,并将索引和轴传递给格式化程序变量:

formato.stringForValue(Double(i), axis: xaxis)

循环后,将格式添加到轴变量中:

xaxis.valueFormatter = formato

最后一步是将新的xaxisformatted添加到barChartView中:

barChartView.xAxis.valueFormatter = xaxis.valueFormatter

这就是setChart()函数中的所有其他行,只是将其保留在原处,希望它能为您提供帮助。



 类似资料:
  • 我正在使用库MPAndroid,< code >编译' com . github . philjay:MPAndroidChart:v 3 . 0 . 0-beta 1 ' 我必须在MPAndroid折线图中传递x轴上的日期和y轴上的值,当我传递x轴或y轴上的值时,应用程序崩溃,显示< code > ArrayIndexOutOfBound < code >异常,数组大小为-2。 我怎么能做到这一

  • 问题内容: 我有一个非常简单的问题。我需要在绘图上有第二个x轴,并且我希望该轴具有一定数量的tic,它们对应于第一个x轴的特定位置。 让我们尝试一个例子。在这里,我将暗物质质量绘制为膨胀系数(定义为1 /(1 + z))的函数,该膨胀系数的范围为0到1。 我想在图的顶部放置另一个x轴,以显示对应于某些膨胀系数值的z轴。那可能吗?如果是的话,我怎么能拥有xtics斧头 问题答案: 我正在从@Dhar

  • 问题内容: 我在同一张图上绘制了多个seaborn点图。x轴是序数,而不是数字。每个点图的序数值都相同。我想将每个图稍微移到一边,pointplot(dodge = …)参数的方式是在单个图内的多条线内进行,但是在这种情况下,是要在彼此之上绘制多个不同图。我怎样才能做到这一点? 理想情况下,我想要一种适用于任何matplotlib图的技术,而不仅仅是专门针对海洋的技术。由于数据不是数字,因此很难为

  • 问题内容: 在我的项目中,我使用iText生成PDF文档。 假设页面的高度为500pt(1个用户单位= 1点),并且我在页面上写了一些文本,然后是图像。 如果内容和图像要求小于450pt,则文本在图像之前。如果内容和图像超过450pt,则文本将转发到下一页。 我的问题是:在写图像之前如何获得剩余的可用空间? 问题答案: 首先,第一件事:在页面上添加文本和图像时,iText有时会更改文本内容和图像的

  • 我的应用程序正在生成大量的木线图( 每个数据点都有一个序号(从1到185000),用于X轴刻度值(带自动范围的整数值): 到目前为止效果很好。现在的困难是添加一个带有自定义值的X轴标记,因为我想为显示的第一个和最后一个数据点添加一个X轴标签(我想显示第一个和最后一个数据点生产日期-它们已经按时间顺序排序)。 我花了几个小时搜索:似乎它绝对不支持JFreeChart。我也没有为此找到任何黑客(例如,

  • 我在一个大学的项目上苦苦挣扎了几天,一周后我必须交上来。我正在使用一个数据集(主要使用熊猫),我必须分析有关登山探险的信息。我的条形图工作得很好,但每次我都会遇到同样的问题:我的x轴没有按顺序增长,这不是最重要的,但它仍然困扰着我。我一直在网上到处寻找,但我找不到任何东西来解决我的问题。以下是我的代码行: 如何按成长顺序排列x轴?我知道这一定很简单,但我就是不知道怎么做;我对所有其他图表都有同样的