2016-03-29 5 views
-1

Ich verwende BarChartView von danielgindi/ios-Charts Diagrammerstellung. Bis jetzt bin ich in der Lage, BarChartView zu folgen. Meine Frage, gibt es eine Möglichkeit, X-Achse auf diese Weise anzupassen, wird es nur zeigen min (links meisten Wert 37,03), max (rechts meisten Wert 37,31, die versteckt), Wert für den grünen Balken (37,17) und Wert für orange bar (37.18 was sich wieder versteckt). Kurz gesagt möchte ich einen Wert von XAxis verbergen, der in meinem Fall nicht wichtig ist.Benutzerdefinierte X-Achse für BarChartView

enter image description here

+0

Warum don filtern Sie nicht die Daten, die im Diagramm angezeigt werden sollen? –

+1

aus dem Quellcode: https://github.com/danielgindi/ios-charts/blob/master/Charts/Classes/Components/ChartXAxis.swift. Ich denke, Sie können versuchen, "setLabelsToSkip" -Methode zu verwenden. Die Methode deaktiviert die automatische Berechnung von Beschriftungen auf der Achse, sodass Sie versuchen können, (dataset.count - 1) oder etwas herum zu überspringen, um zu sehen, wie das Ergebnis aussieht. – Surely

+0

Wenn ich etwas wie barChartView.xAxis.setLabelsToSkip (5) mache, wird das erste Etikett angezeigt, dann überspringe 5 die Anzeige 6. und überspringe dann 5 Mal. Das ist nicht was ich will, aber danke für den Vorschlag. – AAV

Antwort

0

Dies ist ein Beispiel: eine Eigenschaft showOnlyLeftRightEnabled in YourChartXAxis Klasse, dann in Ihrer benutzerdefinierten x-Achse Renderer, overide internal override func drawLabels(context context: CGContext, pos: CGFloat, anchor: CGPoint) genannt hinzuzufügen. die Bar ist, und wandeln den x-Index auf Pixelwerte

brauchen, um herauszufinden Sie die mittlere die Anzeige wie, was ich tat, für den am weitesten links stehenden und am weitesten rechts stehenden Wert über CGPointApplyAffineTransform(position, valueToPixelMatrix)

internal override func drawLabels(context context: CGContext, pos: CGFloat, anchor: CGPoint) 
{ 
    let paraStyle = NSParagraphStyle.defaultParagraphStyle().mutableCopy() as! NSMutableParagraphStyle 
    paraStyle.alignment = .Center 

    let labelAttrs = [NSFontAttributeName: _xAxis.labelFont, 
     NSForegroundColorAttributeName: _xAxis.labelTextColor, 
     NSParagraphStyleAttributeName: paraStyle] 
    let labelRotationAngleRadians = _xAxis.labelRotationAngle * ChartUtils.Math.FDEG2RAD 

    let valueToPixelMatrix = transformer.valueToPixelMatrix 

    var position = CGPoint(x: 0.0, y: 0.0) 

    var labelMaxSize = CGSize() 

    if (_xAxis.isWordWrapEnabled) 
    { 
     labelMaxSize.width = _xAxis.wordWrapWidthPercent * valueToPixelMatrix.a 
    } 
    if let showOnlyLeftRight = (_xAxis as? YourChartXAxis)?.showOnlyLeftRightEnabled 
    { 
     if (showOnlyLeftRight) 
     { 
      for (var i = lowestVisibleXIndex, maxX = min(highestVisibleXIndex + 1, _xAxis.values.count); i < maxX; i += maxX - lowestVisibleXIndex - 1) 
      { 
       let label = _xAxis.values[i] 
       if (label == nil) 
       { 
        continue 
       } 

       position.x = CGFloat(i) 
       position.y = 0.0 
       position = CGPointApplyAffineTransform(position, valueToPixelMatrix) 

       let labelns = label! as NSString 

       //label location by string width 
       // fix rightLabel 
       if (highestVisibleXIndex == lowestVisibleXIndex) 
       { 
        return super.drawLabels(context: context, pos: pos, anchor: anchor) 
       } 
       else if (i == highestVisibleXIndex) 
       { 
        let width = labelns.boundingRectWithSize(labelMaxSize, options: .UsesLineFragmentOrigin, attributes: labelAttrs, context: nil).size.width 
        rightLabelX -= width/2.0 
       } 
       else if (i == lowestVisibleXIndex) 
       { // fix leftLabel 
        let width = labelns.boundingRectWithSize(labelMaxSize, options: .UsesLineFragmentOrigin, attributes: labelAttrs, context: nil).size.width 
        leftLabelX += width/2.0 
       } 

       // fill leftLabel and rightLabel in current visible screen 
       if (lowestVisibleXIndex == highestVisibleXIndex) { 
        ChartUtils.drawMultilineText(context: context, text: label!, point: CGPoint(x: leftLabelX, y: pos), attributes: labelAttrs, constrainedToSize: labelMaxSize, anchor: anchor, angleRadians: labelRotationAngleRadians) 
        ChartUtils.drawMultilineText(context: context, text: label!, point: CGPoint(x: rightLabelX, y: pos), attributes: labelAttrs, constrainedToSize: labelMaxSize, anchor: anchor, angleRadians: labelRotationAngleRadians) 
        break 
       } else if (i == lowestVisibleXIndex) { 
        ChartUtils.drawMultilineText(context: context, text: label!, point: CGPoint(x: leftLabelX, y: pos), attributes: labelAttrs, constrainedToSize: labelMaxSize, anchor: anchor, angleRadians: labelRotationAngleRadians) 
       } else if (i == highestVisibleXIndex) { 
        ChartUtils.drawMultilineText(context: context, text: label!, point: CGPoint(x: rightLabelX, y: pos), attributes: labelAttrs, constrainedToSize: labelMaxSize, anchor: anchor, angleRadians: labelRotationAngleRadians) 
       } 
      } 
     } else { 
      super.drawLabels(context: context, pos: pos, anchor: anchor) 
     } 
    } 
} 
Verwandte Themen