Charts: Suporte de eixo nomeado?

Criado em 18 abr. 2015  ·  36Comentários  ·  Fonte: danielgindi/Charts

2015-04-19 00-48-45 lifts rimmer sk last -1

Olhei o wiki do Android, mas não encontrei a possibilidade de nomear o eixo x ou y.

Isso é possível?

feature help wanted ★★★

Comentários muito úteis

Eu também corri para isso. É uma pena que a solicitação de recurso esteja aberta há cerca de 4 anos. Para implementá-lo, escrevi meu próprio renderizador de eixo y personalizado. Para obter esse título no eixo esquerdo, você pode fazer algo assim:

Em sua configuração de gráfico:

leftAxis.xOffset = 45
leftYAxisRenderer = MyYAxisRenderer(viewPortHandler: viewPortHandler, yAxis: leftAxis, transformer: getTransformer(forAxis: .left))

E crie seu renderizador personalizado:

class MyYAxisRenderer: YAxisRenderer {
    private static let titleLabelPadding: CGFloat = 20

    /**
     Unfortunately iOS Charts has marked many of its methods with internal visibily
     so they cannot be customized. Instead you often need to re-implement logic from
     the charting framework.
    */
    override func renderAxisLabels(context: CGContext) {
        // Render the y-labels.
        super.renderAxisLabels(context: context)

        // Render the y-axis title using our custom renderer.
        renderTitle(title: "Lorem ipsum dolor sit amet", inContext: context, x: MyYAxisRenderer.titleLabelPadding)
    }
}

// MARK: Y-Axis titles.
private extension MyYAxisRenderer {
    func renderTitle(title: String, inContext context: CGContext, x: CGFloat) {
        guard let yAxis = self.axis as? YAxis else { return }

        let attributes: [NSAttributedString.Key: Any] = [
            .font: yAxis.labelFont,
            .foregroundColor: yAxis.labelTextColor
        ]

        // Determine the chart title's y-position.
        let titleSize = title.size(withAttributes: attributes)
        let verticalTitleSize = CGSize(width: titleSize.height, height: titleSize.width)
        let point = CGPoint(x: x, y: (viewPortHandler.chartHeight - verticalTitleSize.height) / 2)

        // Render the chart title.
        ChartUtils.drawText(context: context,
                            text: title,
                            point: point,
                            attributes: attributes,
                            anchor: .zero,
                            angleRadians: .pi / -2)
    }
}

Este exemplo renderizará o título do eixo y com um deslocamento / preenchimento esquerdo de 20px e os rótulos do eixo y com um deslocamento esquerdo de 45px.

Espero que ajude algumas pessoas ...

Todos 36 comentários

Tudo o que é compatível com a versão Android é compatível aqui com a mesma API!

@danielgindi Eu entendo isso e já li a documentação, mas talvez eu tenha esquecido alguma coisa, sabe a resposta para minha pergunta?

Bem, atualmente não está implementado - no momento não estou planejando implementar, então você pode fazer isso :-)
Ou você pode solicitá-lo no repositório MPAndroidChart e quando estiver pronto, eu o puxarei aqui também

+1, Isso seria incrível e um recurso importante - todos nós somos ensinados desde o ensino fundamental a intitular nossos eixos! :)

é possível. Eu já fiz isso antes. semelhante a girar os rótulos do eixo x. O ponto inteiro está calculando o ponto de ancoragem correto para a rotação.

Eu poderia fazer um PR, mas a questão é: o que fiz foi simplesmente uma rotação de 90 e centralizado no meio do eixo y com um texto simples e cor de texto, fonte. Assim que o apoiarmos oficialmente, as pessoas perguntarão mais, como ângulos diferentes, posições, linhas múltiplas, etc ... Isso é doloroso

Não estou entendendo bem sua explicação, porque não há propriedade de rótulo de eixo para aplicar a rotação e centralização. Você apenas quer dizer que adicionou manualmente um rótulo à visualização do gráfico e aplicou manualmente algumas transformações a ele?

Respeitosamente, sugiro que até mesmo rótulos de eixo básicos seriam um grande benefício, e você não seria forçado a oferecer suporte a mais recursos do que gostaria (afinal, você atualmente não está planejando oferecer suporte a este). Espero que você reconsidere!

@UberJason Quer dizer,

Estou de férias ... então posso verificar meu código antigo e registrar um PR para a v3.

+1 Adoraria ver este recurso

+1 Adoraria ver este recurso

+1 Adoraria ver este recurso

+1 Adoraria ver este recurso

isso está implementado?

+1 Adoraria ver este recurso

+1

Existe uma maneira de obter uma posição de quadro que se possa usar para inserir qualquer UIView personalizado?

+1 adoraria ver esse recurso

isso está implementado? eu preciso disso.

Existe um PR # 2387, mas ainda não foi revisado.

+1 adoraria ver esse recurso

+1 adoraria ver esse recurso

1 adoraria ver esse recurso. .....

+1 adoraria ver esse recurso

+1 esse recurso seria ótimo !!

+1

olhe para # 2452 e # 2387

+1 adoraria ver esse recurso

+1 eu também

Realmente poderia usar este recurso ....

Eu também quero esse recurso.

Esperando por isso....

Eu também............

Eu também quero esse recurso ..

Eu também quero esse recurso .. Estou cansado a cada atualização do reescrito

Já vi muita conversa sobre a adição de títulos de eixo em vários segmentos, mas ainda não encontrei um exemplo de código de como adicioná-los. Estou usando o Swift 4.2. Meu gráfico está funcionando muito bem, exceto que não consigo fazer com que os títulos dos eixos apareçam. Alguém tem um exemplo de código?

Eu também corri para isso. É uma pena que a solicitação de recurso esteja aberta há cerca de 4 anos. Para implementá-lo, escrevi meu próprio renderizador de eixo y personalizado. Para obter esse título no eixo esquerdo, você pode fazer algo assim:

Em sua configuração de gráfico:

leftAxis.xOffset = 45
leftYAxisRenderer = MyYAxisRenderer(viewPortHandler: viewPortHandler, yAxis: leftAxis, transformer: getTransformer(forAxis: .left))

E crie seu renderizador personalizado:

class MyYAxisRenderer: YAxisRenderer {
    private static let titleLabelPadding: CGFloat = 20

    /**
     Unfortunately iOS Charts has marked many of its methods with internal visibily
     so they cannot be customized. Instead you often need to re-implement logic from
     the charting framework.
    */
    override func renderAxisLabels(context: CGContext) {
        // Render the y-labels.
        super.renderAxisLabels(context: context)

        // Render the y-axis title using our custom renderer.
        renderTitle(title: "Lorem ipsum dolor sit amet", inContext: context, x: MyYAxisRenderer.titleLabelPadding)
    }
}

// MARK: Y-Axis titles.
private extension MyYAxisRenderer {
    func renderTitle(title: String, inContext context: CGContext, x: CGFloat) {
        guard let yAxis = self.axis as? YAxis else { return }

        let attributes: [NSAttributedString.Key: Any] = [
            .font: yAxis.labelFont,
            .foregroundColor: yAxis.labelTextColor
        ]

        // Determine the chart title's y-position.
        let titleSize = title.size(withAttributes: attributes)
        let verticalTitleSize = CGSize(width: titleSize.height, height: titleSize.width)
        let point = CGPoint(x: x, y: (viewPortHandler.chartHeight - verticalTitleSize.height) / 2)

        // Render the chart title.
        ChartUtils.drawText(context: context,
                            text: title,
                            point: point,
                            attributes: attributes,
                            anchor: .zero,
                            angleRadians: .pi / -2)
    }
}

Este exemplo renderizará o título do eixo y com um deslocamento / preenchimento esquerdo de 20px e os rótulos do eixo y com um deslocamento esquerdo de 45px.

Espero que ajude algumas pessoas ...

Tentando uma solução alternativa mais simples usando SwiftUI:
https://github.com/danielgindi/Charts/issues/4405

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

Questões relacionadas

newbiebie picture newbiebie  ·  3Comentários

sjdevlin picture sjdevlin  ·  3Comentários

ahmedsafadii picture ahmedsafadii  ·  3Comentários

guanyanlin picture guanyanlin  ·  3Comentários

Bharati555 picture Bharati555  ·  4Comentários