Charts: ************* Migrando para o Charts 3.0 *********************

Criado em 19 set. 2016  ·  61Comentários  ·  Fonte: danielgindi/Charts

Muitos perguntaram sobre como migrar para o Charts 3.0. Portanto, tudo estará nas notas de lançamento assim que houver um lançamento, mas vou escrevê-los aqui por agora:


Esta é uma versão principal, com algumas alterações importantes. Portanto, preste atenção.

Atualizações:

  • x-index es estão mortos. Introdução: valores x. Cada entrada agora tem um x e um y .
  • Os gráficos de pizza / radar não têm mais um conceito de índice X
  • Recursos e experiência do Unified XAxis / YAxis.
  • Interfaces de formatador unificadas para eixos.
  • Novo formatador para valores y , não herdando mais de NSNumberFormatter, para ter informações de dataSet e viewport para tomar melhores decisões de formatação.
  • Refatoração principal do mecanismo Highlight.
  • Mecanismo de marcador refatorado
  • Mecanismo de entrada de legenda refatorado
  • Cada conjunto de dados agora pode definir seu próprio formato / tamanho de legenda / etc.
  • Mais demos
  • Algumas classes foram renomeadas, mantendo o nome com namespace apenas em ObjC (usando o recurso Swift 2.2 objc(...) e a alteração de uma atualização de versão principal)
  • FillFormatter agora tem uma representação de bloco usando FillFormatter.withblock(...)
  • O mesmo vale para todos os formatadores padrão.
  • Não há mais saveToCameraRoll() . Como o Xcode 8.0 causa problemas de "privacidade" com o Apple Review, você deve adicionar a chave de privacidade do álbum de fotos ao seu Info.plist para isso.
  • Movido para o Swift 3.0. Certifique-se de que seu projeto esteja em conformidade com o Swift 3.0.
  • Muitas pequenas correções de bugs e melhorias

Quebrando mudanças / como migrar:

  • Todos os construtores do conjunto de dados mudaram - eles não usam mais uma matriz de índices x.
  • Todos os construtores de entrada mudaram - eles assumem um X e um Y.
  • As entradas do gráfico de pizza e radar agora têm suas próprias classes. Portanto, troque as classes de entrada com PieChartDataEntry / RadarChartDataEntry
  • Se você tiver quaisquer chamadas startAtZeroEnabled antigas, elas foram descontinuadas há muito tempo. Substitua-os por axisMinimum .
  • Se você estiver usando formatadores:

    • Substitua qualquer chart.valueFormatter = formatter por chart.valueFormatter = ChartDefaultValueFormatter(formatter: formatter) ou chart.valueFormatter = [[ChartDefaultValueFormatter alloc] initWithFormatter:formatter];

    • Substitua qualquer axis.valueFormatter = formatter por axis.valueFormatter = ChartDefaultAxisValueFormatter(formatter: formatter) ou axis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:formatter];

  • Em geral, todas as funções que aceitavam índices x antes, agora aceitam um valor x, então você pode ter que ajustar um pouco os nomes.
  • Onde ChartViewDelegate é implementado, atualize a interface chartValueSelected
  • Substitua drawSliceTextEnabled por drawEntryLabelsEnabled
  • Se você tiver uma forma de dispersão personalizada - implemente um IShapeRenderer e coloque seu código de renderização lá
  • Se você tiver um marcador personalizado - considere subclassificar MarkerView / MarkerImage ou implementar IMarker . Existem mais opções do que antes ...
  • Se você já usou barSpace antes, passe a usar barWidth
  • Se você usou saveToCameraRoll() , substitua por UIImageWriteToSavedPhotosAlbum(chart.getChartImage(trasparent: false), nil, nil, nil)
  • Algumas classes foram renomeadas para uma aparência mais limpa. Eles não contêm mais o prefixo "Gráfico". Isso é apenas para Swift, onde há namespaces. No ObjC, os nomes permaneceram os mesmos por causa do namespace, usando o recurso do Swift 2.2 de @objc(name) . Se o seu compilador gritar que uma classe não existe, tente remover o gráfico de seu nome. Isso raramente deve acontecer, pois escolhemos apenas as classes que raramente são instanciadas pelo usuário.

Comentários muito úteis

@Carielle Para instalar o Charts 3.0.0 antes de ser compatível com o CocoaPods, remova os Charts antigos do arquivo pod e do projeto e, em seguida, baixe o arquivo Charts.xcodeproj desta página do github.

Em seguida, abra seu projeto de destino no XCode e arraste o arquivo Charts.xcodeproj do diretório do qual ele foi baixado para o seu projeto na interface do XCode.

Depois disso, adicione Charts.framework na seção "Embedded Binary" das configurações gerais do seu projeto.

Todos 61 comentários

@danielgindi Suporte para cocoapods?

@danielgindi ainda posso copiar essas classes para o meu projeto como antes?

Ainda não em Cocoapods. Como eu disse, ainda não foi lançado.

Sim, você pode copiar as aulas como antes. No entanto, é mais confortável arrastar xcodeproj para o projeto. Não é recomendado arrastar as próprias fontes, pois isso tornará a atualização do Chrats em seu projeto mais difícil.

@danielgindi
Obrigado pelo excelente trabalho!

Agora que estou com um problema, noto que os índices x estão mortos:

- x-indexes are dead. Intoducing: x-values. Each entry now has an x and a y.
- In general, all functions that accepted x-indices before, now accept an x-value,   
   so you might have to adjust the names a little bit.

Então, como posso mostrar a string (por exemplo, uma string de data) no xAxis em vez de um número flutuante (como 1.0, 2.0 ...)?

Resposta de Daniel:

Obtenha o NSTimeInterval de uma data, NSTimeInterval é na verdade um duplo.

Mal posso esperar pelo lançamento! 👍

@danielgindi Desde que atualizei para o XCode 8.0, meu projeto não constrói porque tenho Charts instalado via cocoapods e ainda está usando uma versão legada do Swift. Em quanto tempo podemos esperar o lançamento do Charts 3.0 ou o que posso fazer para resolver esses erros enquanto isso? Obrigado por todos os seus esforços.

Aponte seu podfile para o branch master em vez de uma versão por enquanto

@ petester42 Obrigado pela dica, no entanto, não consigo fazer funcionar. Alterei meu podfile para pod 'Charts', :git => 'https://github.com/danielgindi/Charts.git', :branch => 'master' e executei a instalação do pod. A saída ficou assim:
snip20160919_3
Mas ainda recebi o erro "Usar versão de linguagem Swift legada" quando tentei executar o projeto:
snip20160919_1

Mais alguma dica útil?

@Carielle Para instalar o Charts 3.0.0 antes de ser compatível com o CocoaPods, remova os Charts antigos do arquivo pod e do projeto e, em seguida, baixe o arquivo Charts.xcodeproj desta página do github.

Em seguida, abra seu projeto de destino no XCode e arraste o arquivo Charts.xcodeproj do diretório do qual ele foi baixado para o seu projeto na interface do XCode.

Depois disso, adicione Charts.framework na seção "Embedded Binary" das configurações gerais do seu projeto.

@ TUDO verifique # 1291 para problemas do Swift 2.3 e 3.0

Aponte um erro na descrição de migração:
Se você estiver usando formatadores:

  • Substitua qualquer chart.valueFormatter = formatter por chart.valueFormatter = ChartDefaultValueFormatter (formatter: formatter) ou chart.valueFormatter = [[ChartDefaultValue Value Formatter aloc] initWith Formatter: formatter ];
  • Substitua qualquer axis.valueFormatter = formatter por axis.valueFormatter = ChartDefaultAxisValueFormatter (formatter: formatter) ou axis.valueFormatter = [[ChartDefaultAxisValue Value Formatter aloc] initWith Formatter: formatter ];

Estou recebendo o mesmo que @Carielle , tentarei o que @HenryAlkire disse

captura de tela 2016-09-20 as 09 38 38

Qual branch você está usando?

@rrecio Não pode ser .. Eu

Eu estava usando a configuração normal do cocoapod: pod 'Charts'

Para corrigi-lo, removi a entrada do Podfile e vinculei Charts.framework manualmente conforme explicou @Henry

Enviado do meu iPhone

Em 20 de set de 2016, às 21:59, Xuan [email protected] escreveu:

@rrecio Não pode ser .. Eu

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

Alguma ideia de quando estará disponível no Cocoapods?

Como faço para atualizar o Charts para funcionar com o Xcode 8.0 e o Swift 3.0 usando o Carthage?

Quando eu executo a "atualização do carthage", ele ainda está puxando o Charts 2.3.0. Meu Cartfile está configurado para usar a versão mais recente.

Cartfile:

github "danielgindi / Charts"

Linha de comando:

atualização de $ carthage
** Gráficos de clonagem* * Resultado da clonagem
** Clonagem de reino-cacau* * Verificando Gráficos em "v2.3.0"

@danielgindi
Seria ótimo se você incluísse esses recursos ... Como esses recursos devem estar na maior parte da biblioteca ... especialmente em gráficos de alta:

1) gráfico de linha com diferentes formatos de marcadores
https://github.com/danielgindi/Charts/issues/1405

2) Capaz de adicionar visualização personalizada em locais específicos no eixo x. A personalização das cores de fundo está faltando na maioria das visualizações.
https://github.com/danielgindi/Charts/issues/1416

Cartago usa a versão de lançamento mais recente. Se você quiser 3.0 (que ainda não foi lançado), use github "danielgindi/Charts" "master"

Baixe o projeto completo usando o branch master e arraste e solte Charts.xcodeproj e então vá para a aba General e adicione Charts.framework em Embedded Binaries depois de Clean and build para que você possa ver que todos os erros acabaram, apenas experimente. caso necessite de alguma ajuda comente eu te ajudarei. @ petester42 @ Huang-Libo

@HenryAlkire Eu fiz o que você sugeriu e removi os gráficos do meu podfile e arrastei e soltei-os manualmente no meu projeto e adicionei-os como um binário incorporado. No entanto, quando tento construir o projeto, continuo recebendo este erro:
dyld: Library not loaded: @rpath/libswiftCore.dylib Reason: image not found
Parece ser referenciado em Charts.framework / Charts. Alguma ideia de como resolver esse problema?

Resolvi meu próprio problema - meu projeto é um projeto Objective-C usando a biblioteca Swift Charts, então tive que ir para Build Settings> Build Options> "Always Embed Swift Standard Libraries" e definir como YES. Isso substitui o sinalizador "Embedded Content Contains Swift" obsoleto.

@Carielle Também pode ver este problema https://github.com/danielgindi/Charts/issues/1487

@danielgindi É possível estimar o lançamento de Cocoa Pods para o Charts 3? 1-2 semanas ou mais como um mês?

Obrigado por seus esforços 👍

Você pode usar o gráfico 3 com cocoapods agora, apontando para o ramo mestre. Não podemos garantir que será estável, pois não é definitivo.

@ petester42 Estou fornecendo um pod de estrutura que tem uma dependência na especificação do pod para gráficos. Infelizmente, você não pode apontar para outro repositório ou branches nas especificações do pod, como nos arquivos do pod. Eu poderia sobrescrever meu Podfile para meu projeto de exemplo, mas isso não é distribuível. Portanto, por enquanto, estou bloqueado para o Swift 2.2. Mas obrigado pela dica :)

Atualização para outras pessoas usando o gráfico 3 com Cocoapods

Estou trabalhando na migração de um projeto de Swift 2.2 e Xcode 7 para Swift 3.0 e Xcode 8.0. Seguindo a abordagem de @Carielle - e como @ petester42 menciona acima - os gráficos 3 podem ser instalados com cocoapods.

Modificando o podfile para ter:

pod 'Charts', :git => 'https://github.com/danielgindi/Charts.git', :branch => 'master'

levou ao seguinte para mim (1 de outubro de 2016)

screen shot 2016-10-01 at 7 00 20 pm

No entanto, ainda existem alguns problemas de tempo de construção nos quais estou trabalhando, como era de se esperar até a versão final ser lançada.

Por exemplo, plotView.xAxis.setLabelsToSkip(10) causa problemas, pois o método setLabelsToSkip agora não é reconhecido. Posso presumir que isso é temporário enquanto a versão final está sendo trabalhada ou há algum outro método que devo usar?

Obrigado @danielgindi e outros por seu excelente trabalho! Eu ficaria ansioso para ajudar a contribuir com a documentação de migração conforme aprendo, adaptando meu próprio projeto.

Antes de atualizar o gráfico do iOS para a versão 3.0, posso
let radarChartData = RadarChartData (xVals: dataPoints, dataSet: radarChartDataSet)

no entanto, após a atualização, não é possível definir xVals em RadarChartData, apenas
let radarChartData = RadarChartData (dataSet: radarChartDataSet)

Como posso definir xVals na versão mais recente. Eu tentei
dataEntry = RadarChartDataEntry (valor: Double (cleaningValue), data: "setTitle" as AnyObject?)
mas não funciona, já tinha pesquisado muitos documentos, mas não consigo encontrar como fazer isso, poderia me dar um exemplo para isso, obrigado conselho.

@AnChiChang leia as notas acima com

obrigado, entenda pelo ticket 1496

como posso formatar os valores x de matriz dupla para matriz de string na v3.0?

@bingozb por favor, olhe as demos

Google

var a: Double = 1,5
var b: String = String (formato: "% f", a)
print ("b: (b)") // b: 1.500000

@danielgindi Eu uso o gráfico de linha 1, e eu tinha visto a demonstração e não encontrei nada sobre ela.

NSMutableArray * values ​​= [[NSMutableArray alloc] init];
[valores addObject: [[ChartDataEntry alloc] initWithX: i y: val]];
LineChartDataSet * set1 = [[LineChartDataSet alloc] initW ithValues: values label: @ "xxx"];

a demonstração usa apenas valores de x duplos. ChartDataEntry não tem método init que eu possa enviar parâmetro de string.
Bem, eu vi os problemas e descobri que um dizia que podemos enviar integerValues ​​da data, formatá-lo de volta e exibir no rótulo x. Mas não consigo encontrar algum método sobre isso. Não tenho certeza se pode funcionar dessa forma, na verdade.
ajude-me, por favor. Preciso mostrar a data para o eixo x.

Ola @bingozb

Espero que seus valores X sejam armazenados em uma matriz, então, por favor, faça este tipo de,

NSMutableArray * xVals;

  • (NSString *) stringForValue: valor (duplo)
    eixo: (ChartAxisBase *) eixo
    {
    if (xVals.count> 0) {
    return xVals [(int) valor% xVals.count]; // esta base de cálculo você deseja exibir.
    }
    return nil;
    }

Espero que você esteja entendendo.

@ rs10693 Sim, acho este método de protocolo. Parece que tenho que implementá-lo. Mas acho que nenhum delegado estava em conformidade com o protocolo IChartAxisValueFormatter. Quem deve cumprir este protocolo e onde implementar este método. Eu deixo meu controlador fazer isso, mas não funciona.

@bingozb Use ChartViewDelegate e IChartAxisValueFormatter e espero que você @import Charts;

@ rs10693 Oh, entendo! o delegado é valueFormatter ...

@bingozb o que você pode dizer que eu não entendo. por favor me elabore.

@danielgindi ainda não consigo instalar o Charts 3.0.0

O seguinte erro ocorre ao executar pod install
Analisando dependências
[!] Incapaz de satisfazer os seguintes requisitos:

  • Charts (~> 3.0.0) exigido por Podfile

Nenhuma de suas fontes de especificações contém uma especificação que satisfaça a dependência: Charts (~> 3.0.0) .

Você tem:

  • repositórios de fontes desatualizados que você pode atualizar com pod repo update .
  • digitou incorretamente o nome ou a versão.
  • não adicionou o repositório de origem que hospeda o Podspec ao seu Podfile.

Observação: a partir do CocoaPods 1.0, pod repo update não acontece em pod install por padrão.

Por favor, ajude, isso significa que Charts 3.0.0 ainda não foi lançado para instalar usando

ou estou perdendo alguma etapa.

3.0 ainda não está em cocoapods porque não é final. Você pode apontar para o repositório git e master para obter o 3.0 agora

Isso é ótimo saber.

Mas estou um pouco preocupado se precisamos atualizar nosso pod de cacau ou seu repositório para a instalação do 3.0.0 recém-lançado

woot 🎉

@danielgindi, você precisa que eu empurre o pod ou já está coberto?

Tentei, agora depois de muito tempo, disse que o podspec não valida ...

Sim, leva um tempo. Eu posso fazer isso. Você precisa do cocoapods 1.1 para trabalhar com o Xcode 8 / swift 3

@ petester42 @danielgindi
eu tenho
pod --version = 1.1.0

mas ainda assim o comando pod install instala uma versão mais antiga.

Analisando dependências
Baixando dependências
Installing Charts (2.3.0)

Por favor guie

Está funcionando agora, depois de atualizar o repositório mestre do pod, obrigado pela ajuda

Obtendo esse erro no Swift 3.0 , ao implementar o gráfico de barras usando esta biblioteca.

screen shot 2017-01-11 at 1 22 48 pm

Depois de resolver o erro acima, ele dá o próximo erro conforme mostrado abaixo.

screen shot 2017-01-11 at 12 57 26 pm

Como faço para resolver esse erro no Swift 3.0?

let chartDataSet = BarChartDataSet (valores: dataEntries, label: nil)
let chartData = BarChartData (dataSet: chartDataSet)

sobre xVals, você deve implementar stringForValue.

Obrigado. como devo implementar stringForValue para xVals.

Forneça três exemplos rápidos

Olá,
Acabei de migrar do 2 para o 3 (estou usando o 3.0.2) e estou tendo 2 problemas:

  • Se eu tiver 0 valores em meu conjunto de dados, o gráfico de barras está sendo alterado, isso é estranho e eu praticamente uso o código dos exemplos de demonstração. Qualquer ideia ?
  • Existe uma maneira de ocultar os valores 0 a juntos e mostrar apenas os valores que são> 0?

Obrigado pela contribuição.

screen shot 2017-06-09 at 12 15 13 pm
screen shot 2017-06-09 at 12 13 47 pm

na classe BarChartRenderer
em função de modificação aberta drawValues ​​(contexto: CGContext)
adicionar linha 408
`` `
if! dataSet.isStacked
{
para j em 0 .. <Int (ceil (Double (dataSet.entryCount) * animator.phaseX))
{
guarda deixe e = dataSet.entryForIndex (j) como? BarChartDataEntry else {continue}

                    let rect = buffer.rects[j]

                    let x = rect.origin.x + rect.size.width / 2.0

                    if !viewPortHandler.isInBoundsRight(x)
                    {
                        break
                    }
                    if !viewPortHandler.isInBoundsY(rect.origin.y)
                        || !viewPortHandler.isInBoundsLeft(x)
                    {
                        continue
                    }

                    let val = e.y
                    if val == 0                            <-----------this line
                    {                                           <-----------this line
                        continue                         <-----------this line
                    }                                          <-----------this line

`` `

adicione uma variável se quiser
var drawValuesZeroEnabled: Bool {get set}

Obrigado Thierry.
Então está consertado :)

Ainda tenho o problema desse espaçamento estranho.

Acabei de criar um gráfico de barras padrão com valor 0 e ainda tenho o problema - tentei chegar o mais perto possível de uma barra simples para ver qual era o problema.

Parece a demonstração, mas assim que coloco um valor entre 0 e 0,9999 recebo esse preenchimento.

Aqui está o código de amostra:

    <strong i="11">@IBOutlet</strong> var barChartView: BarChartView!

 func viewDidLoad() {
        super.viewDidLoad()
         self.styleChart()
         self.configureChart()
    }

    internal func styleChart() {
        self.barChartView.xAxis.labelPosition = .bottom
        self.barChartView.xAxis.labelCount = 2
    }

    internal func configureChart() {

        var xValues = [String]()
        var entries: [ChartDataEntry] = Array()

         xValues.append("TEST 5")
         xValues.append("TEST 0")
         entries.append(BarChartDataEntry(x: Double(0), y: Double(5) ))
         entries.append(BarChartDataEntry(x: Double(1), y: Double(0) ))


        let dataSet = BarChartDataSet(values: entries, label: "")
        dataSet.drawIconsEnabled = false
        dataSet.drawValuesEnabled = true

        let formatter = NumberFormatter()
        formatter.numberStyle = NumberFormatter.Style.decimal
        dataSet.valueFormatter = DefaultValueFormatter(formatter: formatter)

        let barChartData = BarChartData(dataSet: dataSet)
        barChartData.barWidth = 0.2        
         self.barChartView.data = barChartData
    }

Bem direto.

É um bug?

Problema com 0:
screen shot 2017-06-12 at 11 55 15 am

Não 0:
screen shot 2017-06-12 at 12 21 20 pm

Obrigado pela ajuda ;)

Onde posso encontrar documentos sobre a API antiga para gráficos? Nunca usei esse framework (além de atualizá-lo algumas vezes) e tenho que atualizar de 2.3 para 3.0.4, então documentos antigos seriam legais para descobrir códigos antigos, por exemplo:

[entrySet addObject:[[ChartDataEntry alloc] initWithValue: item.avgSpeed xIndex:index]];

Agora, não há init chamado initWithValue: xIndex , mas sim init chamado:

initWithX: y: , então estou tentando descobrir quais eram os parâmetros antigos e como usar o novo init para obter o mesmo resultado ...

Além disso, a matriz valuesObjc está faltando agora:

//myLineChartView is LineChartView
 NSDate* date = (NSDate*)[myLineChartView.xAxis.valuesObjc objectAtIndex:index];

Como eu disse, nunca usei esse framework, então alguma ajuda seria apreciada, ou pelo menos um link para documentos antigos da API seria útil ...

Não acho que esse recurso exista. Você pode verificar o branch legado / 2.3 para verificar as demos e compará-las com outras versões atuais.

BarChartData.init (xVals: xVals, dataSets: dataSets) não pode funcionar. o que é substituí-lo?

Como posso rolar o valor x do gráfico de linha para o centro de maneira programática?

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