Charts: [Swift 3] LineChartData sem xVals no construtor

Criado em 7 nov. 2016  ·  12Comentários  ·  Fonte: danielgindi/Charts

Eu sei que "Todos os construtores de conjunto de dados mudaram - eles não usam mais uma matriz de índices x", mas como coloco strings no meu eixo x agora se LineChartData não tem mais parâmetros "xVals" ???
Antes era tão fácil fazer isso ...

let weights: [Double] = self.getWeigths()
let weightDates: [String] = self.getWeightDates()

var yValues : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0 ..< dateLastWeights.count {
        let entry = ChartDataEntry(x: Double(i), y: weights[i])
        yValues.append(entry)
    }
let set: LineChartDataSet = LineChartDataSet(values: yValues, label: "First Set")
var dataSets : [LineChartDataSet] = [LineChartDataSet]()
dataSets.append(set)

let data: LineChartData = LineChartData(xVals: weightDates, dataSets: dataSets)
self.lineChart.data = data

Comentários muito úteis

Eu também estava lutando com isso, mas finalmente descobri. Na verdade, você deve configurá-lo no próprio BarChartView usando um formatador de valor de eixo:

let labels = ["Value 1", "Value 2", "Value 3"]
barChartView.xAxis.valueFormatter = DefaultAxisValueFormatter(block: {(index, _) in
    return labels[Int(index)]
})

Definitivamente, não é tão limpo quanto a maneira anterior de fazer isso.


EDIT por danielgindi

Desde 3.0.1, você também pode fazer:

barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: labels)

Além disso, você provavelmente deseja adicionar:

barChartView.xAxis.granularity = 1.0

Todos 12 comentários

Eu também estava lutando com isso, mas finalmente descobri. Na verdade, você deve configurá-lo no próprio BarChartView usando um formatador de valor de eixo:

let labels = ["Value 1", "Value 2", "Value 3"]
barChartView.xAxis.valueFormatter = DefaultAxisValueFormatter(block: {(index, _) in
    return labels[Int(index)]
})

Definitivamente, não é tão limpo quanto a maneira anterior de fazer isso.


EDIT por danielgindi

Desde 3.0.1, você também pode fazer:

barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: labels)

Além disso, você provavelmente deseja adicionar:

barChartView.xAxis.granularity = 1.0

@ esalter-va Sim! Isso realmente funciona !! Mas de alguma forma o gráfico está exibindo mais índices do que deveria ... Ele mostra números decimais bizarros no parâmetro "índice" como (3,5; 0; 0,69; 1,39; 2,09; 2,79; 3,5) e então ele converte para Int (3; 1 ; 1; 2; 2; 3) mas meu yValues ​​tem apenas 4 itens ... Você tem esse tipo de problema?

Nevermid! Esse problema era devido à granularidade! Tentei granularidade = 1 e funciona!

@reicamargo Obrigado por realmente postar sua solução, porque eu estava tendo exatamente o mesmo problema. Tudo bem agora!

barChart.xAxis.granularity = 1

Ei pessoal. Na verdade, você pode usar o novo IndexAxisValueFormatter , que testa limites, etc., e simula o comportamento do índice antigo.

Portanto, chart.xAxis.valueFormatter = IndexAxisValueFormatter(values: ["first index", "second index", "third index"]) , combinado com granularity = 1 servirá perfeitamente :-)

Se você não definiu a granularidade, isso ainda se comportará corretamente e não mostrará rótulos para valores fracionados. Portanto, isso significa que os rótulos podem ser ocultados quando valores inteiros não são renderizados;

Por que, quando faço toda a coisa do xAxis, recebo um erro fatal: o PieChart não tem XAxis: arquivo?

@danielgindi tem alguém dizendo que IndexAxisValueFormatter tem problemas ao ampliar https://github.com/danielgindi/Charts/issues/1909.

@danielgindi devemos fazer isso para cada conjunto ? ou deveria ser depois de criarmos o dataSet com todos os conjuntos ?.

Obrigado

Lamento postar um problema encerrado. No entanto, tenho o mesmo problema, esta solução não está funcionando para mim.
meu problema

Também peço desculpas por postar sobre um problema encerrado, mas tenho lido sobre isso nas últimas 7 horas e estou perdido. Digamos que você queira ter um rótulo do eixo x para todos os dias da semana. Se você usar a solução postada por esalter-va, os rótulos parecem depender dos dados de apoio. Ou seja, se você tiver dados apenas para segunda-feira, o índice referenciado pelo formatador de valor só será igual à representação Int para segunda-feira e nenhum outro dia. Assim, você receberá apenas um rótulo (segunda-feira). Se você quiser um rótulo para cada dia, não importa se você tem dados para esse dia, como você faz isso?

@bsachetta. Você não está sozinho. Tenho lutado com esse problema há semanas. Pelo que eu posso dizer, não há suporte para um ponto de dados nulo. Você deve ter um valor para cada xAxis sequencial ou terá que descobrir como ignorá-los sozinho. Consegui descobrir como fazer isso e meio que funciona, mas desmorona quando você não tem pontos de dados suficientes para preencher a janela de visualização.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

sjdevlin picture sjdevlin  ·  3Comentários

Shunshine07 picture Shunshine07  ·  3Comentários

cilasgimenez picture cilasgimenez  ·  4Comentários

Aungbandlab picture Aungbandlab  ·  4Comentários

guoyutaog picture guoyutaog  ·  3Comentários