Charts: ¿Soporte de eje con nombre?

Creado en 18 abr. 2015  ·  36Comentarios  ·  Fuente: danielgindi/Charts

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

Busqué en la wiki de Android, pero no encontré la posibilidad de nombrar el eje x o y.

¿Es eso posible?

feature help wanted ★★★

Comentario más útil

También me encontré con esto. Es una lástima que esta solicitud de función haya estado abierta durante aproximadamente 4 años. Para implementarlo, escribí mi propio renderizador de eje y personalizado. Para lograr tal título en el eje izquierdo, puede hacer algo como esto:

En la configuración de su gráfico:

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

Y crea tu 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 ejemplo representará el título del eje y con un desplazamiento / relleno a la izquierda de 20 px, y las etiquetas del eje y con un desplazamiento a la izquierda de 45 px.

Espero que esto ayude a algunas personas...

Todos 36 comentarios

¡Todo lo que es compatible con la versión de Android es compatible aquí con exactamente la misma API!

@danielgindi Entiendo esto y ya leí los documentos, pero tal vez me perdí algo, ¿sabes la respuesta a mi pregunta?

Bueno, actualmente no está implementado, actualmente no estoy planeando implementarlo, por lo que puede hacerlo :-)
O puede solicitarlo en el repositorio de MPAndroidChart y cuando esté listo, lo sacaré aquí también

+1, esto sería increíble y una característica importante: ¡a todos nos han enseñado desde la escuela primaria a titular nuestros ejes! :)

es posible. He hecho esto antes. simplemente similar a rotar las etiquetas del eje x. Todo el punto es calcular el punto de anclaje correcto para la rotación.

Podría hacer un PR, pero la pregunta es, lo que hice fue simplemente una rotación de 90 y centrado en el medio del eje y con un texto simple y un color de texto, fuente. Una vez que lo apoyamos oficialmente, la gente pregunta más, como diferentes ángulos, posiciones, múltiples líneas, etc. Eso es doloroso

No sigo bien su explicación, porque no hay una propiedad de etiqueta de eje para aplicar rotación y centrado. ¿Quiere decir que agregó manualmente una etiqueta a la vista de gráfico y le aplicó manualmente algunas transformaciones?

Respetuosamente, sugiero que incluso las etiquetas de eje básicas serían un gran beneficio, y no estaría obligado a admitir más funciones de las que desea (después de todo, actualmente no planea admitir esta). ¡Espero que lo reconsideres!

@UberJason Quiero decir que

Estoy de vacaciones ... así que puedo verificar mi código anterior y presentar un PR para la v3.

+1 Me encantaría ver esta función

+1 Me encantaría ver esta función

+1 Me encantaría ver esta función

+1 Me encantaría ver esta función

¿Está esto implementado?

+1 Me encantaría ver esta función

+1

¿Hay alguna forma de obtener una posición de marco que se pueda usar para insertar cualquier UIView personalizada?

A +1 le encantaría ver esa función.

¿Está esto implementado? necesito este.

Hay un PR # 2387, pero aún no se ha revisado.

A +1 le encantaría ver esa función.

A +1 le encantaría ver esa función.

A +1 le encantaría ver esta función. .....

A +1 le encantaría ver esa función.

+1 esta característica sería genial !!

+1

mira # 2452 y # 2387

A +1 le encantaría ver esa función.

+1 yo también

Realmente podría usar esta función ...

Yo también quiero esta función.

Esperándolo....

Yo también............

También quiero esta función ...

También quiero esta función. Estoy cansado de cada actualización de la reescritura.

He visto mucha charla sobre cómo agregar títulos de ejes en varios subprocesos, pero todavía no he encontrado un ejemplo de código de cómo agregarlos. Estoy usando Swift 4.2. Mi gráfico funciona muy bien, aparte de que no puedo hacer que aparezcan los títulos de los ejes. ¿Alguien tiene un ejemplo de código?

También me encontré con esto. Es una lástima que esta solicitud de función haya estado abierta durante aproximadamente 4 años. Para implementarlo, escribí mi propio renderizador de eje y personalizado. Para lograr tal título en el eje izquierdo, puede hacer algo como esto:

En la configuración de su gráfico:

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

Y crea tu 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 ejemplo representará el título del eje y con un desplazamiento / relleno a la izquierda de 20 px, y las etiquetas del eje y con un desplazamiento a la izquierda de 45 px.

Espero que esto ayude a algunas personas...

Probar una solución alternativa más sencilla con SwiftUI:
https://github.com/danielgindi/Charts/issues/4405

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

kirti0525 picture kirti0525  ·  3Comentarios

coop44483 picture coop44483  ·  3Comentarios

ahmedsafadii picture ahmedsafadii  ·  3Comentarios

kwstasna picture kwstasna  ·  3Comentarios

PrashantKT picture PrashantKT  ·  3Comentarios