none
Chart Nur Horizontale 0 Linie zeichen RRS feed

  • Frage

  • Hallo NG

    Wie kann ich nur die Horizontale 0-Mitteline in einem System.Windows.Forms.DataVisualization.Charting.Chart zeichnen.

    Habe schon mit Major- und Minor.Interval und IntervalOffset herumexperimentiert.

    Leider habe ich keine brauchbare Lösung gefunden.

    Besten Dank

    Robert Oberholzer

    Montag, 8. November 2010 12:24

Antworten

  • Hallo Robert,

    Schau Dir auch mal die Dokumentation zur StripLine-Klasse an (s. nachgetragenen Link oben).

    P.S. Bitte markiere den Beitrag als Antwort, wenn Deine Frage damit gelöst ist (verwende dazu den "Als Antwort markieren"-Link unter dem Beitrag).

    Gruß
    Marcel

    Montag, 8. November 2010 16:04
    Moderator

Alle Antworten

  • Hallo Robert,

       > die 0 - Mittellinie ...

    Du meinst die horizontale X-Achse  -  also die vertikale Y-Achse ausblenden?
    Dann ... (Vorbereitung gemäß: [Posting hier] ) zum Beispiel:

     var yAchse = chart1.ChartAreas[0].AxisY;
      yAchse.Enabled = AxisEnabled.False;
    _______________________________
    
    
     private void Form1_Load(object sender, EventArgs e)
     {
     chart1.Series.Clear();
    
     Series sollSerie = new Series("Soll-Werte");
     List<Point> istWerte = new List<Point>();
     for (int i = 0; i < 10; i++) istWerte.Add(new Point(i*30, i*3));
     List<Point> sollWerte = new List<Point>();
     for (int i = 0; i < 10; i++) sollWerte.Add(new Point(i * 30, i * 3));
    
     for (int i = 0; i < istWerte.Count; i++)
     sollSerie.Points.Add(new DataPoint(
     istWerte[i].X, istWerte[i].Y));
    
     var xAchse = chart1.ChartAreas[0].AxisX;
     var yAchse = chart1.ChartAreas[0].AxisY;
     yAchse.Enabled = AxisEnabled.False;
    
     xAchse.Maximum = 310; xAchse.RoundAxisValues();
    
     sollSerie.MarkerSize = 15;
     sollSerie.MarkerStyle = MarkerStyle.Cross;
     sollSerie.ChartType = SeriesChartType.FastPoint;
    
     Series istSerie = new Series("Ist-Werte");
    
     for (int i = 0; i < istWerte.Count; i++)
     istSerie.Points.Add(new DataPoint(
     istWerte[i].X, istWerte[i].Y));
    
     //istSerie.BorderWidth = 3; 
    
     sollSerie.ChartType = SeriesChartType.Point;
     sollSerie.MarkerSize = 15; 
     sollSerie.MarkerStyle = MarkerStyle.Circle;
    
     chart1.Series.Add(istSerie); 
     chart1.Series.Add(sollSerie);
     }
    

    _______________
    Komplett disablen:

        chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false

    oder etwas wie:

       chart1.ChartAreas[0].AxisX.MajorGrid.IntervalOffset = int.MinValue;

    ciao Frank
    Montag, 8. November 2010 13:09
  • Hallo Frank

    Habe Dein beispiel ausprobiert. Ist nicht ganz das was ich brauche.

    Hier ein Beispiel wie es ungefähr aussehen müsste.

    20%

    10%

    0%    ______________________

    -10%

    -20%        

                  2007     2008    2009

    Mit Balkendiagramm (ColumnChart) ins Plus und ins Minus

    Gruss Robert

    Montag, 8. November 2010 14:22
  • Hallo Robert,

    Falls ich Dich richtig verstehe, sollte Dir folgender Code weiterhelfen:

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Windows.Forms.DataVisualization.Charting;
    
    namespace ChartTest1
    {
     public partial class Form1 : Form
     {
      public Form1()
      {
       InitializeComponent();
      }
    
      private void Form1_Load(object sender, EventArgs e)
      {
       chart1.Series.Clear();
    
       List<PercentPerYear> salesList = new List<PercentPerYear> { 
        new PercentPerYear { Year="2007", Percent=19 },
        new PercentPerYear { Year="2008", Percent=4 },
        new PercentPerYear { Year="2009", Percent=-12 }
       };
    
       chart1.DataBindTable(salesList, "Year");
    
       chart1.ChartAreas[0].AxisY.Maximum = 20;
       chart1.ChartAreas[0].AxisY.Minimum = -20;
       chart1.ChartAreas[0].AxisY.IntervalAutoMode = IntervalAutoMode.FixedCount;
       chart1.ChartAreas[0].AxisY.Interval = 10;
       chart1.ChartAreas[0].AxisY.MajorTickMark.LineWidth = 0;
       
    
       chart1.ChartAreas[0].AxisY.LineWidth = 0;
       chart1.ChartAreas[0].AxisY.LabelStyle.Format = "{0}%";
       chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
    
       chart1.ChartAreas[0].AxisX.LineWidth = 0;
       chart1.ChartAreas[0].AxisX.MajorTickMark.LineWidth = 0;
       chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
    
       StripLine line = new StripLine {
        BorderColor = System.Drawing.Color.Black,
        Interval = 0, 
        IntervalOffset = 0,
        StripWidth = 0,
        StripWidthType = DateTimeIntervalType.NotSet
       };
    
       chart1.ChartAreas[0].AxisY.StripLines.Add(line);
      }
     }
    
     public class PercentPerYear
     {
      public string Year { get; set; }
      public double Percent { get; set; }
     }
    }
    
    

    s.a. StripLine-Klasse:
    http://msdn.microsoft.com/de-de/library/system.windows.forms.datavisualization.charting.stripline.aspx 

     

    Gruß
    Marcel

    Montag, 8. November 2010 15:50
    Moderator
  • Genau was ich suchte.

    Vielen Dank

    Robert

    Montag, 8. November 2010 15:55
  • Hallo Robert,

    Schau Dir auch mal die Dokumentation zur StripLine-Klasse an (s. nachgetragenen Link oben).

    P.S. Bitte markiere den Beitrag als Antwort, wenn Deine Frage damit gelöst ist (verwende dazu den "Als Antwort markieren"-Link unter dem Beitrag).

    Gruß
    Marcel

    Montag, 8. November 2010 16:04
    Moderator
  • Hallo Robert,

    ich bin gerade erst wieder da. Wenn Du es so haben willst, ist StripLine auch eine gute Möglichkeit - ich brauche das ja nicht zu mehr groß mit Code zu beschreiben, denn Marcel hat Deine verbesserte Beschreibung ja schon mit einem Codebeispiel beschrieben.

    Diese Bereichsstreifen sind horizontale oder vertikale Bereiche (Streifen), die den Hintergrund eines Diagramms in regulären oder benutzerdefinierten Intervallen ggf. schattieren. Meine genannter IntervalOffset spielt da mit der StripLine zusammen.

    Trotzdem für andere später: Diese StripLine bestimmt die Wiederholungen, wann in welchem Intervall einmal oder wiederholt gezeichnet wird. Interval, -Eigenschaft gesteuert. Wenn der Interval-Eigenschaft ein Wert ungleich 0 (null) zugewiesen wird, wird ein Bereichsstreifen immer wieder bei jedem angegebenen Intervall gezeichnet. Das habe ich in meinem Hinweis - als Deine Frage noch nicht ganz klar war - ausgenutzt.



    ciao Frank
    Montag, 8. November 2010 18:26