Charts: Fazendo valores X corretamente dimensionados (não equidistantes)

Criado em 8 jul. 2015  ·  59Comentários  ·  Fonte: danielgindi/Charts

Olá, estou fazendo um gráfico de linha com os seguintes pontos de dados de exemplo:

(0,0)
(1,0)
(5,0)

Existe uma maneira de fazer com que os 3 pontos apareçam para que sejam dimensionados corretamente? Agora, se eu adicionar um conjunto de dados com 2 matrizes, todos os 3 pontos estarão à mesma distância um do outro. Eu sei que há um tópico sobre isso no MPAndroidCharts, mas eu queria saber se alguém descobriu como fazer isso no iOS. Muito obrigado!

feature ★★★

Comentários muito úteis

Desculpe, confusão de repositório :-)
Este recurso estará disponível em breve :-)

Todos 59 comentários

você está dizendo que eles têm a mesma distância no xAxis atualmente e deseja que o xAxis se comporte como o yAxis?

Oi Xuan,

sim. Os 3 pontos estão à mesma distância no eixo x. Portanto, o gráfico de
(0,0) (1,0) (2,0) tem a mesma aparência que (0,0) (1,0) (100,0), com exceção dos rótulos. Eu gostaria que (0,0) e (1,0) fossem muito próximos, enquanto (1,0) e (100,0) fossem distantes. Não tenho certeza se isso faz sentido. Obrigado pela resposta!

Melhor,
Felix

Em 8 de julho de 2015, às 19h53, Xuan [email protected] escreveu:

você está dizendo que eles têm a mesma distância no xAxis?

-
Responda a este e-mail diretamente ou visualize-o no GitHub.

Ótimo, fui a primeira (eu acho) pessoa a solicitar esse recurso. Eu já fiz a solicitação para Android e iOS, porém nenhuma resposta ainda ... Espero que mais e mais pessoas possam perceber que este é um recurso importante para usuários profissionais.

@PhilJay e @danielgindi Acho que nosso objetivo é fornecer gráficos de classe mundial. Eu adoraria ajudar nisso, no entanto, não consigo ver o quadro completo de todos os recursos dentro dos projetos. Vocês têm um melhor entendimento sobre isso. Pelo que eu tentei, renderizar xAxis como yAxis não é a parte difícil, o que me bloqueia é que os rótulos xAxis não estão no lugar certo durante o zoom e a escala. Ainda não entendi como renderizar corretamente os rótulos, considerando a largura e a posição dos rótulos.

Isso está se tornando um recurso popular, nós sabemos. É bastante complexo de implementar e não tivemos que projetá-lo ainda ...
É claro que envolve a mudança de todo o sistema de coordenadas para algo que não pode assumir nada sobre o eixo X. Ainda não chegamos aos detalhes, mas estou planejando aprender esse tópico em breve.

"Em breve" significa quando eu tiver tempo para sentar uma noite inteira nele. Tenho um casamento para planejar no momento, então você pode ver que estou um pouco menos ativo aqui :-)

@danielgindi ENORMES parabéns a você da China!

Você pode nos dar uma ideia aproximada de quando isso pode ser implementado? E parabéns!

@aaga Acho que leva muito tempo, já que a lógica é muito diferente e muitas coisas para pensar e reescrever. Pode levar meses, mesmo que seja de alta prioridade.

+1 para este recurso

Olá, sou novo no iOS, trabalho com o swift. Estou usando esta bela biblioteca de gráficos. Estou fazendo um gráfico de linha com as datas no eixo x e não consigo plotar pontos devidamente dimensionados (datas). Tentei passar NSDates para xVals. Eu não sei o que há de errado com o jeito que estou fazendo .... por favor me ajude.

Você pode converter suas datas em intervalos de tempo para usar como valores X. Em seguida, você pode formatar o intervalo de tempo de volta para datas a serem exibidas no eixo X.

@ petester42 @ shrikantwalekar-tudi mas note que os pontos de dados do eixo x subsequentes serão representados de forma equidistante, mesmo se o intervalo de tempo entre os pontos de dados não for equidistante.

Portanto, acho que podemos interpretar o comentário @ shrikantwalekar-tudip feito como: +1

Oi, eu fiz isso e funcionou !!, mas se todo o meu eixo x é de milhares de valores e se os pontos a traçar são menos de 10 pontos. Estou recebendo algo assim, enquanto rolar após o zoom.
Embora não houvesse lacuna como mostrado.
screen shot 2016-02-06 at 6 36 02 pm

Não tenho certeza se entendi.

Alguém pode me ajudar com isso por favor!!! Qualquer ajuda será apreciada! Obrigado!!!

É muito importante

1 para mim, esse recurso seria REALMENTE um avanço

+1

1 para mim também

1 para mim também. Você não pode usar o eixo X para representar o tempo sem esse recurso, pois a maioria dos dados não vem em intervalos de tempo equidistantes.

+1 Há algum trabalho sendo feito sobre isso?

Do meu lado, vou começar a brincar com isso. Uma vez que minha principal preocupação é usar o eixo x para representar o tempo, para começar irei oferecer suporte apenas a transformações afins de valores x para espaço de pixel. Imagino que a outra chave adicionará uma estrutura para formatar valores no eixo x em rótulos apropriados. É claro que, se uma correção estiver esperando nos bastidores, vou esperar. :)

@ StephanieB5 Estou na mesma situação. Vou dar uma olhada e tentar ter uma ideia melhor do que é necessário. Se você precisar de alguma ajuda ou quiser discutir qualquer coisa, me avise. Seria bom ter uma ideia do roteiro para esse recurso, se houver um, @danielgindi ou @PhilJay https://github.com/PhilJay/MPAndroidChart/issues/12 ?

@RyGuyM é ótimo perguntar sobre o roteiro para esse recurso. Além disso, a colaboração seria ótima. :) Eu fiz um fork deste repositório e estou começando a fazer o protótipo de uma ideia que tenho para isso. Se não houver ninguém trabalhando nisso, podemos mover nossa conversa para o meu repositório. Vou mandar um ping de lá para o caso.

obrigado galera! Aqui está o que eu tentei: implemente o eixo xe o renderizador da mesma forma que o eixo y funciona. A ideia é clara, mas o problema é que muitas coisas precisam ser consideradas para torná-lo um bom design e implementação da perspectiva do framework, além da parte do Android. É por isso que é lento para avançar.

Se você apenas quer resolver seu problema, você pode dar uma olhada em como o eixo y do gráfico de barras horizontais é implementado, uma vez que já está na posição do 'eixo x'. então você pode pegar emprestado esse eixo y como seu eixo x.

Se você realmente quer mesclá-lo com o master (o que eu desejo), e tem um tópico para acompanhar a discussão e o progresso, me dê o link e podemos continuar, verei o que posso ajudar e oferecer.

@danielgindi Eu também sugiro que este seja o próximo recurso de matança: dançarino:

Obrigado @ liuxuan30. :) Estou apenas brincando no meu próprio branch de teste agora. Eu dividi minha ideia em estágios, então não terei nada pronto para o mainline por um tempo. No entanto, se desejar, você sempre pode acompanhar minhas atualizações incrementais.

@ liuxuan30 Obrigado pela resposta! Farei um grande esforço para trabalhar nisso nas próximas semanas e gostaria de ver isso voltar ao projeto também. Esta biblioteca é ótima, mas infelizmente é um obstáculo para mim. Vou começar a me organizar com @ StephanieB5 amanhã e podemos começar a acompanhar a discussão.

+1

+1

Há algum tempo de chegada previsto para quando esse recurso será implementado? Estou trabalhando em um projeto no momento que requer esse recurso, pois estamos exibindo os dados da linha do tempo no gráfico, então preciso que o eixo x seja dimensionado corretamente

Não, não há HEC

+1

+1

+1

Também preciso disso, mas, por enquanto, qual é a solução alternativa apropriada para alterar os valores do eixo x para dados de série temporal não regulares? Ou seja, se eu tiver

(25/4, 5)
(29/04, 10)
(5/10, 15)
(5/11, 20)
(7/4, 25)

Quais dados posso usar para criar um gráfico que exibe apropriadamente a quantidade de tempo entre cada ponto de dados, de modo que o ponto de dados 7/4 seja exibido como ~ 60 dias de distância do ponto de dados anterior, em vez de mostrar 1 dia de distância.

Algo assim funciona:

(25/04, 5)
(26/4, zero)
(27/4, zero)
(28/4, zero)
(29/04, 10)
(30/4, zero)
(5/1, nulo)
etc ...

Já tentei brincar com isso, mas recebo erros quando o número de xVals não é igual ao número de yVals.

quando você não tem o valor y para o xIndex, simplesmente não insira os valores y na matriz

Desculpe, confusão de repositório :-)
Este recurso estará disponível em breve :-)

@PhilJay essa é uma ótima notícia! Estou testando esta biblioteca pela primeira vez, mas como meu caso de uso são dados de série temporal, eu realmente preciso disso para fazer as coisas funcionarem

Estou trabalhando na migração das alterações beta do repositório Android, e ele estará disponível em breve :-)

Essa migração inclui todos os novos recursos do 3.0, incluindo os valores x dispersos?

Em 10 de julho de 2016, às 8h06, Daniel Cohen Gindi [email protected] escreveu:

Estou trabalhando na migração das alterações beta do repositório Android, e ele estará disponível em breve :-)

-
Você está recebendo isto porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub ou ignore a conversa.

É bom ver que esse recurso já foi solicitado e que um trabalho foi feito nele. Aguardo ansiosamente a solução, pois adoro esta biblioteca, mas não posso usá-la em meus aplicativos a menos que os gráficos estejam devidamente proporcionados no eixo X.

Acho que vai sair em breve, tem sido um tempo lonnnnng!

Eu mal posso esperar para que esse recurso esteja disponível, eu realmente preciso dele porque meu aplicativo usa um eixo X baseado no tempo.

@danielgindi obrigado pelo seu excelente trabalho! Você já teve a chance de migrar as alterações do Android para habilitar este recurso? Pode como usar esse recurso? Obrigado novamente!

já existe uma filial. No entanto, ainda está sob correção de bug

@ liuxuan30 que ramo é esse? 3,0?

@rlimberger v3 branch

Obrigada. Existe um exemplo de como usar esse recurso (espaçamento x irregular e valores x diferentes para conjuntos de dados diferentes)?

@rlimberger Deve ser uma abordagem semelhante. Você pode verificar o branch v3 para ver se há um exemplo do ChartsDemo (desculpe, não tenho tempo para verificar agora)

A demonstração Objc funciona bem o suficiente para fornecer uma boa demonstração dos recursos da v3. Obrigado @ liuxuan30! A propósito, é possível fazer o gráfico de dispersão com uma linha conectando os pontos (uma linha diferente para cada conjunto de dados)? Ao contrário da demonstração Gráfico de linhas múltiplas, a demonstração Gráfico de dispersão parece mostrar um conjunto independente de valores x para cada conjunto de dados, que é exatamente o que eu quero. No entanto, gostaria que todos os pontos de cada conjunto de dados fossem conectados por uma linha separada.

esquece; Eu encontrei a resposta para minha própria pergunta. LineChartDataSet e ScatterChartDataSet são inicializados com uma matriz de objetos ChartDataEntry, cada um dos quais pode ter um conjunto completamente independente (x, y). Incrível!

Sim, incrível :-)
Estamos quase prontos com a v3, algumas últimas correções de bugs etc.
Basicamente - queremos que os usuários testem o branch v3 agora, diga-nos se introduzimos novos bugs.

Este problema será encerrado agora (yay !!!)

Meu código agora trava com a mensagem "'NSInvalidArgumentException', motivo: '- [Charts.ChartDataEntry encodeWithCoder:]: seletor não reconhecido enviado para a instância ...'" ao executar NSKeyedArchiver.archivedData (withRootObject :) com um argumento do tipo ChartDataEntry. Isso não aconteceu antes. É possível que seja devido a um bug na v3?

Esquece. Não é um bug na v3 que fez meu código travar. Eu apenas tive que adicionar novamente a conformidade da classe ChartDataEntry ao NSCoding.

Qualquer outra pessoa recebendo este erro: "Erro: este aplicativo, ou uma biblioteca que ele usa, passou um valor numérico inválido (NaN ou não um número) para a API CoreGraphics"

O backtrace indica: ": CGContextAddLineToPoint: nenhum ponto atual. "

Onde posso encontrar um exemplo de dados x não equidistantes (como data)?
Quero dizer, gostaria de criar um gráfico como este:
screen shot 2017-10-25 at 15 05 09

É possível?

os valores do eixo y e x não estão definidos corretamente.
`if (! UIUtils.isEmpty (mModel.getChartData ())) {
for (String lists: mModel.getChartData (). split (",")) {
if (listas! = null) {
String [] str = lists.split (":");
mXAxisNames.add (str [0]);
mYAxisNames.add (str [1]);
}
}
contagem flutuante = mYAxisNames.size ();
ArrayListyvalues ​​= new ArrayList <> ();
para (int i = 0; i <mYAxisNames.size (); i ++) {
yvalues.add (new BarEntry (i, Float.parseFloat (mYAxisNames.get (i))));
}
BarDataSet dataSet = novo BarDataSet (yvalues, "");
dataSet.setColors (Utils.getBarChartColors ());
dataSet.setValueFormatter (new MyvalueFormatter ());

        BarData data = new BarData(dataSet);
        data.setValueTextSize(10f);
        data.setBarWidth(0.9f);
        data.setValueTextColor(Color.DKGRAY);

        float minValue = data.getYMin();
        float maxValue = data.getYMax();
        //Initial values for Y axis
        int yMax = (int) maxValue + 1;
        int yMin = (int) minValue - 1;

        XAxis xAxis = mBinding.barChart.getXAxis();
        xAxis.setGranularity(1f);
        xAxis.setDrawGridLines(false);
        xAxis.setDrawAxisLine(true);
        xAxis.setDrawLabels(true);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setValueFormatter(new MyAxisValueFormatter(mXAxisNames));

// eixo Y
mBinding.barChart.getAxisRight (). setEnabled (false);
mBinding.barChart.getAxisLeft (). setEnabled (true);
YAxis leftAxis = mBinding.barChart.getAxisLeft ();
leftAxis.setValueFormatter (new MyYAxisValueFormatter ());
leftAxis.setDrawGridLines (true);
leftAxis.setDrawLabels (true);
leftAxis.setSpaceTop (10f);
leftAxis.setAxisMinimum (0f);
leftAxis.setAxisMaximum (yMax);
leftAxis.setLabelCount ((int) count, true);

        // Default value
        mBinding.barChart.setDrawBarShadow(false);
        mBinding.barChart.setTouchEnabled(false);
        mBinding.barChart.setDrawValueAboveBar(true);
        mBinding.barChart.setPinchZoom(false);
        mBinding.barChart.setScaleEnabled(false);
        mBinding.barChart.setDescription(null);
        mBinding.barChart.setVerticalScrollBarEnabled(false);
        mBinding.barChart.setHorizontalScrollBarEnabled(false);
        mBinding.barChart.setDrawGridBackground(false);
        mBinding.barChart.setDoubleTapToZoomEnabled(false);
        mBinding.barChart.setData(data);
        mBinding.barChart.setFitBars(true);
        mBinding.barChart.setAutoScaleMinMaxEnabled(true);
        mBinding.barChart.animateXY(1000, 1000);
        mBinding.barChart.invalidate();
    [}`]

screenshot_20181212-175338

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

Questões relacionadas

anhltse03448 picture anhltse03448  ·  3Comentários

sjdevlin picture sjdevlin  ·  3Comentários

Bharati555 picture Bharati555  ·  4Comentários

kirti0525 picture kirti0525  ·  3Comentários

newbiebie picture newbiebie  ·  3Comentários