swift - 如何使图表始终显示网格线?
问题描述
我正在使用 Charts 3.1.1,但我不知道如何使图表始终显示 x 轴网格线:
在此示例中,我希望图表在 4 月 25 日之后显示 xAxis 网格线和标签,即 4 月 26 日、4 月 27 日、4 月 28 日、4 月 29 日、4 月 30 日、5 月 1 日。
当我想要显示的每一天都没有数据点时,我创建了这个类来生成足够的日期来填补空白:
class AxisValuesGenerator: NSObject {
var days: [String]? = []
func generatexAxisDates(liftEvents: [LiftEvent]) -> [String]? {
var dates: [Date] = []
let intervalBetweenDates: TimeInterval = 3600 * 24 // 3600 = 1 hour
let firstDate = (liftEvents.first?.date)! // - intervalBetweenDates
var lastDate = liftEvents.last?.date
if Double(liftEvents.count) < 7 {
let daysToAdd = intervalBetweenDates * Double(7 - liftEvents.count)
lastDate = lastDate?.addingTimeInterval(daysToAdd)
for _ in 0...6 {
dates = self.intervalDates(from: firstDate, to: lastDate!, with: intervalBetweenDates)
}
} else {
dates = self.intervalDates(from: firstDate, to: lastDate!, with: intervalBetweenDates)
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d"
days = dates.map {dateFormatter.string(from: $0)}
return days
}
func intervalDates(from startDate: Date, to endDate:Date, with interval:TimeInterval) -> [Date] {
guard interval > 0 else { return [] }
var dates:[Date] = [startDate]
var currentDate = startDate
while currentDate <= endDate {
currentDate = currentDate.addingTimeInterval(interval)
dates.append(currentDate)
}
return dates
}
它确实生成了我想要的日期:
▿ Optional<Array<String>> ▿ some : 7 elements
- 0 : "Apr 25"
- 1 : "Apr 26"
- 2 : "Apr 27"
- 3 : "Apr 28"
- 4 : "Apr 29"
- 5 : "Apr 30"
- 6 : "May 1"
- 7 : "May 2"
但图表不显示它们。
如何让图表显示缺失的网格线?
更新:
我试过这样设置setVisibleXRange
和setLabelCount
(强制):
chartView.setVisibleXRange(minXRange: 2.0, maxXRange: 6.0)
let leftAxis = chartView.leftAxis
leftAxis.setLabelCount(7, force: true)
如果我要绘制 6 个或更多值,则图表会正确呈现。但是您可以看到,只有 2 个值我可以强制使用线条,但 xAxis 标签是错误的:
解决方案
推荐阅读
- python - Python - 查找并获取数组中元素的位置
- sqlalchemy - 使用声明性 SQLAlchemy 查询时失败:sa_exc.InvalidRequestError
- numpy - 用 numpy 修补图像
- python - 如何从透视投影图像计算正交投影图像?
- json - 在 Groovy 中修改 JSON
- python - Flask - 当按下按钮时如何保存当前时间
- amazon-web-services - 使用 Terrafom 安装 Cloudwatch 代理
- python - 无法安装 python“Scalene”模块
- python - 使用 Ifcopenshell 和 OpenCascade 从 IFC 3D 实体获取几何图形
- java - 从 Jenkins Build artifacts 下载文件