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

时间:2019-03-22 18:04:05

标签: ios charts ios-charts

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

我想发生的事情:

我希望图形具有2个带有自定义标签值的x轴刻度/标签。我的x轴值是日期/时间(我使用基于IAxisValueFormatter的DateTimeFormatter)。例如,如果我的x轴最小值为1:00 pm,而x轴最大值为4:00 pm,且标签计数设置为2,如何自定义标签值呢?我希望在这种情况下,标签1的 2:00 pm,标签2的3:00 pm 。 这个图书馆有可能吗?

实际情况:

它在图形上显示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()

这是用于设置xAxis标签计数和最小/最大的代码:

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)"
   }

1 个答案:

答案 0 :(得分:0)

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

尝试一下:

xAxis.labelCount = 4
xAxis.granularity = 3600

注意:

  • 3600基本上是60*60,即每小时的秒数
    • 根据您给定的1pm-4pm范围,您要显示2pm和3pm标签,每隔1小时
  • labelCount影响granularity
    • 我们需要将其保持为4,因为如果labelCount保持为2,则最小值granularity必须大于等于5400,即1.5小时间隔,给出1 pm、2:30pm、4:下午00点,这与您的预期不符
      • 为什么使用5400?因为1553284800 - 1553274000 = 1080010800/2 = 5400