如何设置自定义X轴标签间隔?

问题描述 投票:0回答:1

我正在使用https://github.com/danielgindi/Charts

我想要发生什么:

我希望图表有2个x轴刻度/标签和自定义标签值。我的x轴值是日期/时间(我使用基于IAxisValueFormatter的DateTimeFormatter)。例如,如果我的x轴最小值是下午1:00,x轴最大值是下午4:00,标签计数设置为2,我该如何自定义我想要的标签值?我希望此方案中的值为标签1的下午2:00和标签2的下午3:00。这个库可以实现吗?

实际发生的是什么:

它在图表上显示2个x轴标签,标签值为1 = 2:40 PM,标签2 = 3:46

注意:

我每分钟都会添加一个新的数据点,所以我从一个空的数据集开始,每分钟一次,我将条目添加到数据集中,如下所示:

...
let entry = ChartDataEntry(x: point.x, y: point.y)
lineChartDataSet?.addEntryOrdered(entry)
lineChartData?.notifyDataChanged()
view.notifyDataSetChanged()
view.reloadInputViews()

这是设置x轴标签计数和最小/最大值的代码:

xAxis.labelCount = 2
xAxis.axisMinimum = 1553274000.0 //double value equivalent of 1 pm (timeIntervalSince1970)
xAxis.axisMaximum = 1553284800.0 //double value equivalent of 4 pm (timeIntervalSince1970)

这是我的轴值格式化程序,用于显示日期和时间:

public class GraphDateTimeFormatter: NSObject, IAxisValueFormatter {
   private let dateFormatterHourMin = DateFormatter()
   private let dateFormatterMonthDay = DateFormatter()

   override init() {
       super.init()
       dateFormatterHourMin.dateFormat = "hh mm a"
       dateFormatterMonthDay.dateFormat = "MMM dd"
   }

   public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
       let time = dateFormatterHourMin.string(from: Date(timeIntervalSince1970: value))
       let monthDay = dateFormatterMonthDay.string(from: Date(timeIntervalSince1970: value))
       return "\(time)\n\(monthDay)"
   }
ios charts ios-charts
1个回答
0
投票

更新标签计数并将自定义粒度设置为十二进制倍数,因为时间在base-12系统中计算,但默认情况下图表遵循base-10系统。

试试这个:

xAxis.labelCount = 4
xAxis.granularity = 3600

笔记:

  • 3600基本上是60*60,即一小时内的秒数 根据你给定的下午1点到4点的范围,你想要显示下午2点和下午3点的标签,每隔1小时
  • labelCount影响granularity 我们需要将其保持在4,因为如果labelCount保持在2,则最小granularity必须> = 5400,即1.5小时的间隔给出下午1点,下午2点30分,下午4点,这不符合您的期望 为什么5400?因为1553284800 - 1553274000 = 1080010800/2 = 5400
© www.soinside.com 2019 - 2024. All rights reserved.