λ΄ κΊΎμ μ ν μ°¨νΈμμ λ°μ΄ν° νλͺ©μ΄ νλλ§μλ κ²½μ° λ°μ΄ν° ν¬μΈνΈκ° λ€μκ³Ό κ°μ΄ μ€κ°μ νμλλλ‘ μ€μ νμ΅λλ€.
λ λ§μ λ°μ΄ν° νλͺ©μ΄ μμΌλ©΄ λ€μκ³Ό κ°μ΄ νμλ©λλ€.
λ΄κ° κ°μ§ λ¬Έμ λ X μΆμ λ§μ§λ§ λ μ΄λΈμ΄ νμλμ§ μλλ€λ κ²μ λλ€. μ΄κ²μ μ§λ 30 μΌ λμμ λ°μ΄ν°μ΄λ―λ‘ λ§μ§λ§ λ μ΄λΈ μΈ 12 μ 25 μΌμ νμνκ³ μΆμ΅λλ€. λ΄ κΊΎμ μ ν μ°¨νΈκ° νμ X μΆμ 첫 λ²μ§Έμ λ§μ§λ§ λ μ΄λΈμ νμνλλ‘νλ λ°©λ²μ΄ μμ΅λκΉ? μ¬μ΄μ λ μ΄λΈμ κ³μ°νκ±°λ 건λ λ°λ λ°©λ²μ μκ΄ μμ΅λλ€.
avoidFirstLastClippingEnabled
μλ, κΈ°λ³Έκ°μ falseμ
λλ€.
/// if set to true, the chart will avoid that the first and last label entry in the chart "clip" off the edge of the chart
open var avoidFirstLastClippingEnabled = false
@ cnowak7 λ λ²μ§Έ μ΄λ―Έμ§μ μΈκΈ λ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ΅λκΉ? μ루μ μ 곡μ νμμμ€
avoidFirstLastClippingEnabled
μ λμμ΄λμ§ μμ΅λλ€. λ§μ§λ§ λ μ΄λΈμ νμ μ립λλ€.
μμ€ μ½λλ₯Ό μ΄ν΄λ³΄λ©΄ μΆ νλͺ©μ΄ AxisRendererBase.computeAxisValues
λ‘ κ³μ°λλ©° μ΅λ κ°μ νμνλλ‘ κ°μ ν λ°©λ²μ΄ μμ΅λλ€. μ΄ κΈ°λ₯μ μ΄μ λ²μ μμ μ§μλμλ€κ³ μκ°ν©λλ€.
https://github.com/danielgindi/Charts/issues/2007μ΄ μ΄κ²κ³Ό κ°μ λ¬Έμ λ‘ λ³΄μ
λκΉ?
@ondrejhanslik κΈ°λ³Έμ μΌλ‘ computeAxisValues ββ()λ λ²μλ₯Ό κ³μ°νκΈ° μν΄ μ΅μκ°κ³Ό μ΅λ κ°μ μ¬μ©ν©λλ€. λ°λΌμ λͺ¨λ λ°μ΄ν°λ₯Ό 보κ΄νλ €λ©΄ μ΅μκ°κ³Ό μ΅λ κ°μ΄ λ°μ΄ν°μ μ΅μ / μ΅λ κ°λ³΄λ€ 컀μΌν©λλ€. computeAxisValues ββ()μμ μ΅μ / μ΅λ κ°μ΄ 무μμ΄λ©° λ°μ΄ν°μ μ΅μ / μ΅λ κ°μ΄ 무μμΈμ§ νμΈ νμ΅λκΉ?
@ liuxuan30 μ¬μ©μ μ§μ λ¬Έμμ΄ λ°°μ΄μ X μΆ κ° μ¦ λ μ§λ‘ μ¬μ©ν©λλ€.
λ€μμ λ΄ μ°¨νΈμ μ€ν¬λ¦° μ·μ λλ€.
avoidFirstLastClippingEnabled
λ₯Ό trueλ‘ μ€μ νλ©΄ λ΄ μ°¨νΈκ° λ€μκ³Ό κ°μ΄ 보μ
λλ€.
λ€μμ X μΆμ μ€μ νλ λ° μ¬μ©νλ λͺ κ°μ§ μΆκ° μ½λμ λλ€.
private func setUpLineChartPreferences() {
.
.
.
// x-axis
self.lineChart.xAxis.labelPosition = .bottom
self.lineChart.xAxis.drawGridLinesEnabled = true
self.lineChart.xAxis.granularity = 1.0
.
.
.
}
private func setUpLineChart(withDataEntries entries: [ChartDataEntry]) {
let entryCount = entries.count
if entryCount > 0 {
let dataSet = LineChartDataSet(values: entries, label: nil)
dataSet.drawFilledEnabled = true
dataSet.fillColor = .green
dataSet.circleRadius = 5
dataSet.drawValuesEnabled = false
dataSet.setColor(.black)
dataSet.highlightColor = .green
dataSet.setCircleColor(.blue)
let lineChartData = LineChartData(dataSet: dataSet)
self.lineChart.data = lineChartData
// SET UP X-AXIS
self.lineChart.xAxis.valueFormatter = IndexAxisValueFormatter(values: self.chartLabels)
self.lineChart.xAxis.avoidFirstLastClippingEnabled = true
print("NOWAK: CHART LABELS THO - \(self.chartLabels)")
if entryCount == 1 {
self.lineChart.xAxis.axisMinimum = -1.0
self.lineChart.xAxis.axisMaximum = 1.0
} else {
self.lineChart.xAxis.axisMinimum = 0.0
self.lineChart.xAxis.axisMaximum = Double(self.chartLabels.count - 1)
}
print("X MIN IS \(self.lineChart.xAxis.axisMinimum) AND X MAX IS \(self.lineChart.xAxis.axisMaximum)")
} else {
self.lineChart.noDataText = "No Stats For The Past \(self.currentFilter.capitalized)"
self.lineChart.setNeedsDisplay()
}
switch self.currentFilter {
case "week":
self.weekFilterButton.backgroundColor = .blue
self.monthFilterButton.backgroundColor = .darkGray
self.yearFilterButton.backgroundColor = .darkGray
case "month":
self.monthFilterButton.backgroundColor = .blue
self.weekFilterButton.backgroundColor = .darkGray
self.yearFilterButton.backgroundColor = .darkGray
case "year":
self.yearFilterButton.backgroundColor = .blue
self.weekFilterButton.backgroundColor = .darkGray
self.monthFilterButton.backgroundColor = .darkGray
default:
print("ERROR SETTING FILTER BUTTON BACKGROUND COLORS")
}
self.stopLoading()
}
λλ Charts 3.0.1μ μ¬μ©νκ³ μμ΅λλ€. :)
μ¬κΈ°λ λ§μ°¬κ°μ§μ λλ€. Charts 3.0.1 , XCode 8.0 λ° Swift 3.0
μ΄ μν©μ λν ν΄κ²°μ± μ΄ λΆκ°λ₯ν κ²½μ°, μ°¨νΈκ° νμ λ λ λ§μ§λ§ κ° (μ€λ)μ κ°μ‘° νμνμ¬ "BalloonMarker"μ "Dec XX \ n500 ".
λ΄ νΈμ λΆλͺ ν :)
νμΈνμ΅λλ€.
μ°¨νΈ 3.0μμ x μΆμ y μΆμ²λΌ λμνλ―λ‘ y μΆ λ μ΄λΈμ νμΈν μ μμ΅λλ€. κ°μ₯ ν° y μΆ λ μ΄λΈμ λ°μ΄ν°μ μ΅λ κ°λ³΄λ€ μμ΅λλ€.
computeAxisValues()
μμλ μΆμ μ΅μ / μ΅λ κ° (λ°μ΄ν°μ μ΅μ / μ΅λ κ°)μμ μ΅μκ°κ³Ό μ΅λ κ°μ μ½κ³ x μΆ λ μ΄λΈμ μ»κΈ°μν κ°κ²©μ κ³μ°ν©λλ€.
μλ₯Ό λ€μ΄ ChartsDemo-Line Chart Dual YAxisμμ x κ°μ΄ 0μμ 20 μ¬μ΄ μΈ κ²½μ°
computeAxisValues()
λ μ΅μ / μ΅λ κ°μΌλ‘ 0, 20μ μ·¨νκ³ , λ΄ labelCount
λ κΈ°λ³Έμ μΌλ‘ 6μ΄κ³ , rawInterval = (max - min) / labelCount
κ³μ°νκ³ λμ€μ μ΅μ’
κ°κ²©μ 3μ΄λ©λλ€. 0λΆν° μμνμ¬ 0,3,6,9,12,15,18 μΈ 7 (labelCount + 1) λ μ΄λΈμ μ»μ΅λλ€. λ§μ§λ§ x μΆ λ μ΄λΈμ 20μ΄ μλλΌ 18μ
λλ€.
isAvoidFirstLastClippingEnabled
κ° μλνμ§ μλ μ΄μ λ λ§μ§λ§ λ μ΄λΈμ΄ κ²½κ³λ₯Ό λ²μ΄ λ¬μ λ μ²λ¦¬νκΈ° λλ¬Έμμ΄ λ¬Έμ μ κ΄λ ¨μ΄ μμ΅λλ€.
λ°μ΄ν°μ x κ°μΈ λ μ΄λΈμ νμΈνλ €λ©΄ computeAxisValues()
λ₯Ό μ‘°μ νμ¬ λ μ΄λΈμ λ°νν΄μΌν©λλ€. computeAxisValues()
μμ μμΈν λ΄μ©μ νμΈνλ©΄ λ³κ²½ν μ μμ΅λλ€.
@danielgindi κ·Έλ° μ¬μ©μ μ¬λ‘μ λν΄ μ΄λ»κ² μκ°νμλκΉ?
@ liuxuan30 νΉμ λ μ΄λΈμ λ°ννκΈ° μν΄ computeAxisValues
μ μ‘°μ νκ³ μΆμ§ μμ΅λλ€. μλ₯Ό λ€μ΄, λ μ§λ³λ‘ μ°¨νΈλ₯Ό νμ ν λ (μ : x- κ°μ μμΌ, ν λ¬μ μΌ λλ 1 λ
μ λ¬) νμ ν 첫 λ²μ§Έ λ° λ§μ§λ§ λ μ΄λΈ (μ : μμμΌκ³Ό μΌμμΌ λλ 1 / 1 λ° 31/1).
λ¨Όμ νμμ΄ μ§μ λ κ° (μ : μμΌ μ΄λ¦ λλ νμμ΄ μ§μ λ μμΌ)μ μμ± ν λ€μ λ€μκ³Ό κ°μ΄ μ€μ ν©λλ€.
xAxis.axisMinimum = 0
xAxis.axisMaximum = Double(xValues.count - 1)
xAxis.valueFormatter = IndexAxisValueFormatter(values: xValues)
λ΄κ° νμν κ²μ νμ 첫 λ²μ§Έ λ μ΄λΈκ³Ό λ§μ§λ§ λ μ΄λΈμ νμ ν λ€μ λ μ¬μ΄μ λ μ΄λΈμ κ³μ°νλ λ λλν computeAxisValues
μ
λλ€.
μ΄κ²μ λ§€μ° κΈ°λ³Έμ μ΄κ³ λ§€μ° μΌλ°μ μΈ μ¬μ© μ¬λ‘μ λλ€.
μ΄ν΄ νμ΄μ. x μΆ λ μ΄λΈμ λν λ²κ·Έκ° μμ΅λλ€ (μ : λ μ΄λΈ κ²ΉμΉ¨).
νμ¬ λ‘μ§μ λ¨Όμ μ΅μ / μ΅λ κ°μ μκ³ , κ·Έλ‘λΆν° κ°κ²©μ μμ±νκ³ λμ νμ¬ μΆ λ μ΄λΈμ μ»μ΅λλ€. κ·Έλ¬λ νμ¬ computeAxisValues()
μ μ΅λ κ° / λ§μ§λ§ λ μ΄λΈμ΄ xAxis.axisMaximumμμ 보μ₯νμ§ μμ΅λλ€. κ·Έκ²μ΄ λ΄κ° μ΄κ²μ λν΄ @danielgindi μ μ
λ ₯μ΄ νμν κ²μ
λλ€.
computeAxisValues ββ()μ 'tweak'보λ€λ 'override'λ₯Ό μ¬μ©ν΄μΌ ν μλ μμ΅λλ€. 첫 λ²μ§Έ / λ§μ§λ§ κ°μ΄ νμ ν΄κ²° λ°©λ²μΌλ‘ νμλλλ‘ κ΅¬νμ μ 곡 ν μ μμ΅λλ€. κ·Έλ¬λ μ΄λ‘ μΈν΄ λ μ΄λΈμ΄ κ²½κ³λ₯Ό λ²μ΄ λ¬κ±°λ λ€λ₯Έ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
λ λ€λ₯Έ λ°©λ²μ setLabelCount(count, forceLabelEnabled)
μ΄ x κ° κ°μμ κ°κ±°λ κ²°κ³Όλ₯Ό νμΈνκΈ° μν΄ μ λ°μ μλνλ κ²μ
λλ€.
λ
Όλ¦¬λ μλΉν λ€λ¦
λλ€.
// force label count
if axis.isForceLabelsEnabled
{
interval = Double(range) / Double(labelCount - 1)
// Ensure stops contains at least n elements.
axis.entries.removeAll(keepingCapacity: true)
axis.entries.reserveCapacity(labelCount)
var v = yMin
for _ in 0 ..< labelCount
{
axis.entries.append(v)
v += interval
}
n = labelCount
}
μΆκ° κ³Όμ μ΄ μλλΌ λ¨μν μνλΏμ λλ€.
@ liuxuan30 x μΆ κ°μ΄ λ¬Έμμ΄ νμ
@ vaibhav-varshaaweblabs x μΆμ μ΄μ μ°¨νΈ 3.xμμ λ λ°°λ§ μ¬μ©νλ―λ‘ valueFormatterλ₯Ό μ¬μ©νμ¬ λ λ°° λμ λ μ΄λΈμ νμ ν μ μμ΅λλ€. κ·Έλ¬λ νλ / μΆμ / μ€ν¬λ‘€μ κ³ λ €ν΄μΌνλ κ²½μ° valueFormatterκ° λ³΅μ‘ ν μ μμ΅λλ€.
λꡬλ μ§ Charts 3.0.2μμ μ΄μ λν ν΄κ²°μ±
μ μ°Ύμμ΅λκΉ? x μΆ λ μ΄λΈμ λ μ§ λ¬Έμμ΄μ μ¬μ©νκ³ μμΌλ©° λ§μ§λ§ λ μ΄λΈμ΄ κ°λ μ¬λΌμ§λ κ²μ 보μμ§λ§ μ¬ννλ λ° λ¬Έμ κ° μμ΅λλ€. isAvoidFirstLastClippingEnabled
μ΄ true
μ€μ λμ΄ μμ΅λλ€. μ΄κ²μ΄ # 2563κ³Ό κ΄λ ¨μ΄ μλμ§ κΆκΈν©λλ€.
@ vaibhav-varshaaweblabs @raudabaugh : setDataCount λ©μλκ° X λ° Yμ λν΄ int λλ double κ°μ μμνκΈ° λλ¬Έμ μ΄λ»κ² μ¬μ©μκ° X μΆμ λ¬Έμμ΄μ 그릴 μ μμμ΅λκΉ?
μΉμ νκ² μλ €μ£ΌμΈμ. 미리 κ°μ¬λ립λλ€.
bottomAxis.setLabelCount (entries.size (), true); λ§μ§λ§μΌλ‘ νμλλλ‘ μ¬λ°±μ μ€λ₯Έμͺ½μΌλ‘ μ€μ ν©λλ€.
lineChart?.xAxis.setLabelCount(arrOfMonth.count, force: true)
μ΄κ²μ λΌμΈ μ°¨νΈμ λ§μ§λ§ κ°μ νμνλ λ° λμμ΄ λ κ²μ λλ€.
κ°μ₯ μ μ©ν λκΈ
μ΄κ²μ λΌμΈ μ°¨νΈμ λ§μ§λ§ κ°μ νμνλ λ° λμμ΄ λ κ²μ λλ€.