Charts: Benannte Achsenunterstützung?

Erstellt am 18. Apr. 2015  ·  36Kommentare  ·  Quelle: danielgindi/Charts

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

Ich habe mir das Android-Wiki angesehen, aber keine Möglichkeit gefunden, die x- oder y-Achse zu benennen.

Ist das möglich?

feature help wanted ★★★

Hilfreichster Kommentar

Ich bin auch nur darauf gestoßen. Es ist schade, dass diese Funktionsanfrage seit ungefähr 4 Jahren geöffnet ist. Um es zu implementieren, habe ich meinen eigenen benutzerdefinierten Y-Achsen-Renderer geschrieben. Um einen solchen Titel auf der linken Achse zu erhalten, können Sie Folgendes tun:

In Ihrer Diagrammkonfiguration:

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

Und erstellen Sie Ihren benutzerdefinierten Renderer:

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)
    }
}

In diesem Beispiel werden der Titel der y-Achse mit einem linken Versatz / Abstand von 20 Pixel und die Beschriftungen der y-Achse mit einem linken Versatz von 45 Pixel gerendert.

Ich hoffe das hilft einigen Leuten ...

Alle 36 Kommentare

Alles, was in der Android-Version unterstützt wird, wird hier mit genau der gleichen API unterstützt!

@danielgindi Ich verstehe das und habe bereits die Dokumente gelesen, aber vielleicht habe ich etwas verpasst. Kennst du die Antwort auf meine Frage?

Nun, derzeit ist es nicht implementiert - ich plane derzeit keine Implementierung, also können Sie es tun :-)
Oder Sie können im MPAndroidChart-Repo danach fragen, und wenn es fertig ist, werde ich es auch hier ziehen

+1, Das wäre großartig und ein wichtiges Feature - wir werden alle seit der Grundschule unterrichtet, um unsere Äxte zu benennen! :) :)

es ist möglich. Ich habe das schon mal gemacht. Ähnlich wie beim Drehen der Beschriftungen der x-Achse. Der ganze Punkt berechnet den richtigen Ankerpunkt für die Drehung.

Ich könnte eine PR machen, aber die Frage ist, was ich gemacht habe, ist einfach 90 Umdrehungen und zentriert in der Mitte der y-Achse mit einem einfachen Text und Textfarbe, Schriftart. Sobald wir es offiziell unterstützen, würden die Leute mehr fragen, wie unterschiedliche Winkel, Positionen, mehrere Linien usw. Das ist schmerzhaft

Ich folge Ihrer Erklärung nicht ganz, da es keine Achsenbeschriftungseigenschaft gibt, auf die Drehung und Zentrierung angewendet werden können. Meinen Sie damit nur, dass Sie der Diagrammansicht manuell eine Beschriftung hinzugefügt und einige Transformationen manuell darauf angewendet haben?

Mit Respekt schlage ich vor, dass selbst grundlegende Achsenbeschriftungen ein großer Vorteil wären und Sie nicht gezwungen wären, mehr Funktionen zu unterstützen, als Sie möchten (schließlich planen Sie derzeit nicht, diese zu unterstützen). Ich hoffe, Sie werden es sich noch einmal überlegen!

@UberJason Ich meine, ich habe die

Ich bin im Urlaub .. also kann ich meinen alten Code überprüfen und eine PR für v3 einreichen.

+1 Würde diese Funktion gerne sehen

+1 Würde diese Funktion gerne sehen

+1 Würde diese Funktion gerne sehen

+1 Würde diese Funktion gerne sehen

ist das implementiert?

+1 Würde diese Funktion gerne sehen

+1

Gibt es eine Möglichkeit, eine Frame-Position zu erhalten, mit der Sie eine benutzerdefinierte UIView einfügen können?

+1 würde diese Funktion gerne sehen

ist das implementiert? ich brauche das.

Es gibt eine PR # 2387, die jedoch noch nicht überprüft wurde.

+1 würde diese Funktion gerne sehen

+1 würde diese Funktion gerne sehen

+1 würde diese Funktion gerne sehen. ..... .....

+1 würde diese Funktion gerne sehen

+1 diese Funktion wäre toll !!

+1

Schauen Sie sich # 2452 und # 2387 an

+1 würde diese Funktion gerne sehen

+1 ich auch

Könnte diese Funktion wirklich nutzen ...

Ich möchte diese Funktion auch.

Auf es warten....

Ich auch............

Ich möchte diese Funktion auch ..

Ich möchte diese Funktion auch. Ich bin müde für jedes Update des Umschreibens

Ich habe viel über das Hinzufügen von Achsentiteln in mehreren Threads gesprochen, aber immer noch kein Codebeispiel für das Hinzufügen dieser Titel gefunden. Ich benutze Swift 4.2. Mein Diagramm funktioniert hervorragend, außer dass keine Achsentitel angezeigt werden können. Hat jemand ein Codebeispiel?

Ich bin auch nur darauf gestoßen. Es ist schade, dass diese Funktionsanfrage seit ungefähr 4 Jahren geöffnet ist. Um es zu implementieren, habe ich meinen eigenen benutzerdefinierten Y-Achsen-Renderer geschrieben. Um einen solchen Titel auf der linken Achse zu erhalten, können Sie Folgendes tun:

In Ihrer Diagrammkonfiguration:

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

Und erstellen Sie Ihren benutzerdefinierten Renderer:

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)
    }
}

In diesem Beispiel werden der Titel der y-Achse mit einem linken Versatz / Abstand von 20 Pixel und die Beschriftungen der y-Achse mit einem linken Versatz von 45 Pixel gerendert.

Ich hoffe das hilft einigen Leuten ...

Versuchen Sie eine einfachere Problemumgehung mit SwiftUI:
https://github.com/danielgindi/Charts/issues/4405

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

sjdevlin picture sjdevlin  ·  3Kommentare

newbiebie picture newbiebie  ·  3Kommentare

BrandonShega picture BrandonShega  ·  4Kommentare

cilasgimenez picture cilasgimenez  ·  4Kommentare

deepumukundan picture deepumukundan  ·  3Kommentare