我正在使用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)"
}
答案 0 :(得分:0)
更新标签计数,并将自定义粒度设置为十二进制倍数,因为时间是在以12为基数的系统中计算的,但是默认情况下,图表遵循以10为基数的系统。
尝试一下:
xAxis.labelCount = 4
xAxis.granularity = 3600
注意:
3600
基本上是60*60
,即每小时的秒数
labelCount
影响granularity
labelCount
保持为2,则最小值granularity
必须大于等于5400,即1.5小时间隔,给出1 pm、2:30pm、4:下午00点,这与您的预期不符
5400
?因为1553284800 - 1553274000 = 10800
和10800/2 = 5400