Π ΠΌΠΎΠ΅ΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ Ρ Π½Π°ΡΡΡΠΎΠΈΠ» Π΅Π³ΠΎ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° Π·Π°ΠΏΠΈΡΡ Π΄Π°Π½Π½ΡΡ , Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π» ΡΠΎΡΠΊΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΡΠ»ΠΈ Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΌΠ΅ΡΠΊΠ° Π½Π° ΠΎΡΠΈ X Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ. ΠΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 30 Π΄Π½Π΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π±Ρ Ρ ΠΎΡΠ΅Π», ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠ»ΡΠΊ, 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 Π£Π΄Π°Π»ΠΎΡΡ Π»ΠΈ Π²Π°ΠΌ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π½Π° 2-ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ? ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΠ΄Π΅Π»ΠΈΡΠ΅ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ
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 :)
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅. ΠΡΠ°ΡΠΈΠΊΠΈ 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, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ 7 (labelCount + 1) ΠΌΠ΅ΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ 0,3,6,9,12,15,18. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΌΠ΅ΡΠΊΠ° ΠΎΡΠΈ x - 18, Π° Π½Π΅ 20.
ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ isAvoidFirstLastClippingEnabled
Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΌΠ΅ΡΠΊΠ° Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅.
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ x Π²Π°ΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ computeAxisValues()
ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΌΠ΅ΡΠΊΠΈ. ΠΡΠΎΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ computeAxisValues()
ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ.
@danielgindi, ΡΡΠΎ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΎ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ?
@ liuxuan30 ΠΡ Π½Π΅ Ρ
ΠΎΡΠΈΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ computeAxisValues
ΡΡΠΎΠ±Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Ρ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ Π΄Π°ΡΠ°ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ x - ΡΡΠΎ Π΄Π½ΠΈ Π½Π΅Π΄Π΅Π»ΠΈ, Π΄Π½ΠΈ ΠΌΠ΅ΡΡΡΠ° ΠΈΠ»ΠΈ ΠΌΠ΅ΡΡΡΡ Π³ΠΎΠ΄Π°), ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΠΈΡΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΌΠ΅ΡΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ½Π΅Π΄Π΅Π»ΡΠ½ΠΈΠΊ ΠΈ Π²ΠΎΡΠΊΡΠ΅ΡΠ΅Π½ΡΠ΅ ΠΈΠ»ΠΈ 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 ββ(). ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΡΠΎΠ±Ρ Π²Π°ΡΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ΅ / ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΠΎΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²ΡΡ ΠΎΠ΄Ρ ΡΡΠ»ΡΠΊΠ° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ 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 Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅? Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠΈ x - ΡΡΠΎ Π΄Π°ΡΡ Π² ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅.
@ vaibhav-varshaaweblabs ΠΎΡΡ x ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π’ΠΠΠ¬ΠΠ Π² Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ 3.x, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ valueFormatter Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΊΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ valueFormatter ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ / ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π°ΡΠ΅Π» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π² Charts 3.0.2? Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡΠΎΠΊΠΈ Π΄Π°ΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ
ΠΌΠ΅ΡΠΎΠΊ ΠΎΡΠΈ x ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΈΠΆΡ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΌΠ΅ΡΠΊΠ° ΠΈΡΡΠ΅Π·Π°Π΅Ρ, Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΎ Ρ isAvoidFirstLastClippingEnabled
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π² true
. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΡΠΎ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ # 2563?
@ vaibhav-varshaaweblabs @raudabaugh : ΠΠ°ΠΊ Π²Π°ΠΌ, ΡΠ΅Π±ΡΡΠ°, ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΡΡΠΎΠΊΠΈ Π½Π° ΠΎΡΠΈ X, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ΅ΡΠΎΠ΄ setDataCount ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ int ΠΈΠ»ΠΈ double Π΄Π»Ρ X ΠΈ Y.
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π΄Π°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ
bottomAxis.setLabelCount (entry.size (), ΠΈΡΡΠΈΠ½Π°); Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠ΅ΡΡΠΈΠΊ.
lineChart?.xAxis.setLabelCount(arrOfMonth.count, force: true)
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ - Ρ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΈ ΡΠ°Π±ΠΎΡΠ°Π» Ρ ΠΌΠ΅Π½Ρ
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ - Ρ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΈ ΡΠ°Π±ΠΎΡΠ°Π» Ρ ΠΌΠ΅Π½Ρ