Multi-Y Demo

From ZedGraphWiki

Jump to: navigation, search

NOTE: The code on this page is for ZedGraph version 5. You can view the code for version 4.3 here.


Image:Multi_y.png

Sample Code in C#

// Call this method from the Form_Load method, passing your ZedGraphControl instance
public void CreateChart( ZedGraphControl zgc )
{
   // Get a reference to the GraphPane
   GraphPane myPane = zgc.GraphPane;

   // Set the titles and axis labels
   myPane.Title.Text = "Demonstration of Multi Y Graph";
   myPane.XAxis.Title.Text = "Time, s";
   myPane.YAxis.Title.Text = "Velocity, m/s";
   myPane.Y2Axis.Title.Text = "Acceleration, m/s2";
 
   // Make up some data points based on the Sine function
   PointPairList vList = new PointPairList();
   PointPairList aList = new PointPairList();
   PointPairList dList = new PointPairList();
   PointPairList eList = new PointPairList();
 
   // Fabricate some data values
   for ( int i=0; i<30; i++ )
   {
      double time = (double) i;
      double acceleration = 2.0;
      double velocity = acceleration * time;
      double distance = acceleration * time * time / 2.0;
      double energy = 100.0 * velocity * velocity / 2.0;
      aList.Add( time, acceleration );
      vList.Add( time, velocity );
      eList.Add( time, energy );
      dList.Add( time, distance );
   }
 
   // Generate a red curve with diamond symbols, and "Velocity" in the legend
   LineItem myCurve = myPane.AddCurve( "Velocity",
      vList, Color.Red, SymbolType.Diamond );
   // Fill the symbols with white
   myCurve.Symbol.Fill = new Fill( Color.White );
 
   // Generate a blue curve with circle symbols, and "Acceleration" in the legend
   myCurve = myPane.AddCurve( "Acceleration",
      aList, Color.Blue, SymbolType.Circle );
   // Fill the symbols with white
   myCurve.Symbol.Fill = new Fill( Color.White );
   // Associate this curve with the Y2 axis
   myCurve.IsY2Axis = true;
 
   // Generate a green curve with square symbols, and "Distance" in the legend
   myCurve = myPane.AddCurve( "Distance",
      dList, Color.Green, SymbolType.Square );
   // Fill the symbols with white
   myCurve.Symbol.Fill = new Fill( Color.White );
   // Associate this curve with the second Y axis
   myCurve.YAxisIndex = 1;
 
   // Generate a Black curve with triangle symbols, and "Energy" in the legend
   myCurve = myPane.AddCurve( "Energy",
      eList, Color.Black, SymbolType.Triangle );
   // Fill the symbols with white
   myCurve.Symbol.Fill = new Fill( Color.White );
   // Associate this curve with the Y2 axis
   myCurve.IsY2Axis = true;
   // Associate this curve with the second Y2 axis
   myCurve.YAxisIndex = 1;
 
   // Show the x axis grid
   myPane.XAxis.MajorGrid.IsVisible = true;
 
   // Make the Y axis scale red
   myPane.YAxis.Scale.FontSpec.FontColor = Color.Red;
   myPane.YAxis.Title.FontSpec.FontColor = Color.Red;
   // turn off the opposite tics so the Y tics don't show up on the Y2 axis
   myPane.YAxis.MajorTic.IsOpposite = false;
   myPane.YAxis.MinorTic.IsOpposite = false;
   // Don't display the Y zero line
   myPane.YAxis.MajorGrid.IsZeroLine = false;
   // Align the Y axis labels so they are flush to the axis
   myPane.YAxis.Scale.Align = AlignP.Inside;
   myPane.YAxis.Scale.Max = 100;
 
   // Enable the Y2 axis display
   myPane.Y2Axis.IsVisible = true;
   // Make the Y2 axis scale blue
   myPane.Y2Axis.Scale.FontSpec.FontColor = Color.Blue;
   myPane.Y2Axis.Title.FontSpec.FontColor = Color.Blue;
   // turn off the opposite tics so the Y2 tics don't show up on the Y axis
   myPane.Y2Axis.MajorTic.IsOpposite = false;
   myPane.Y2Axis.MinorTic.IsOpposite = false;
   // Display the Y2 axis grid lines
   myPane.Y2Axis.MajorGrid.IsVisible = true;
   // Align the Y2 axis labels so they are flush to the axis
   myPane.Y2Axis.Scale.Align = AlignP.Inside;
   myPane.Y2Axis.Scale.Min = 1.5;
   myPane.Y2Axis.Scale.Max = 3;
 
   // Create a second Y Axis, green
   YAxis yAxis3 = new YAxis( "Distance, m" );
   myPane.YAxisList.Add( yAxis3 );
   yAxis3.Scale.FontSpec.FontColor = Color.Green;
   yAxis3.Title.FontSpec.FontColor = Color.Green;
   yAxis3.Color = Color.Green;
   // turn off the opposite tics so the Y2 tics don't show up on the Y axis
   yAxis3.MajorTic.IsInside = false;
   yAxis3.MinorTic.IsInside = false;
   yAxis3.MajorTic.IsOpposite = false;
   yAxis3.MinorTic.IsOpposite = false;
   // Align the Y2 axis labels so they are flush to the axis
   yAxis3.Scale.Align = AlignP.Inside;
 
   Y2Axis yAxis4 = new Y2Axis( "Energy" );
   yAxis4.IsVisible = true;
   myPane.Y2AxisList.Add( yAxis4 );
   // turn off the opposite tics so the Y2 tics don't show up on the Y axis
   yAxis4.MajorTic.IsInside = false;
   yAxis4.MinorTic.IsInside = false;
   yAxis4.MajorTic.IsOpposite = false;
   yAxis4.MinorTic.IsOpposite = false;
   // Align the Y2 axis labels so they are flush to the axis
   yAxis4.Scale.Align = AlignP.Inside;
   yAxis4.Type = AxisType.Log;
   yAxis4.Scale.Min = 100;
 
   // Fill the axis background with a gradient
   myPane.Chart.Fill = new Fill( Color.White, Color.LightGoldenrodYellow, 45.0f );
 
   zgc.AxisChange();
}

Sample Code in VB

' Call this method from the Form_Load method, passing your ZedGraphControl
Private Sub CreateGraph(ByVal zgc as ZedGraphControl)
   Dim myPane As GraphPane = zgc.GraphPane

   ' Set the titles and axis labels
   myPane.Title.Text = "Demonstration of Multi Y Graph"
   myPane.XAxis.Title.Text = "Time, s"
   myPane.YAxis.Title.Text = "Velocity, m/s"
   myPane.Y2Axis.Title.Text = "Acceleration, m/s2"
   
   ' Make up some data points based on the Sine function
   Dim vList As New PointPairList()
   Dim aList As New PointPairList()
   Dim dList As New PointPairList()
   Dim eList As New PointPairList()
   
   ' Fabricate some data values
   Dim i As Integer
   Dim time As Double, acceleration As Double, velocity As Double
   Dim distance As Double, energy As Double
   For i = 0 To 30
      time = i
      acceleration = 2.0
      velocity = acceleration * time
      distance = acceleration * time * time / 2.0
      energy = 100.0 * velocity * velocity / 2.0
      aList.Add(time, acceleration)
      vList.Add(time, velocity)
      eList.Add(time, energy)
      dList.Add(time, distance)
   Next i
   
   ' Generate a red curve with diamond symbols, and "Velocity" in the legend
   Dim myCurve As LineItem = myPane.AddCurve("Velocity", vList, Color.Red, SymbolType.Diamond)
   ' Fill the symbols with white
   myCurve.Symbol.Fill = New Fill(Color.White)
   
   ' Generate a blue curve with circle symbols, and "Acceleration" in the legend
   myCurve = myPane.AddCurve("Acceleration", aList, Color.Blue, SymbolType.Circle)
   ' Fill the symbols with white
   myCurve.Symbol.Fill = New Fill(Color.White)
   ' Associate this curve with the Y2 axis
   myCurve.IsY2Axis = True
   
   ' Generate a green curve with square symbols, and "Distance" in the legend
   myCurve = myPane.AddCurve("Distance", dList, Color.Green, SymbolType.Square)
   ' Fill the symbols with white
   myCurve.Symbol.Fill = New Fill(Color.White)
   ' Associate this curve with the second Y axis
   myCurve.YAxisIndex = 1
   
   ' Generate a Black curve with triangle symbols, and "Energy" in the legend
   myCurve = myPane.AddCurve("Energy", eList, Color.Black, SymbolType.Triangle)
   ' Fill the symbols with white
   myCurve.Symbol.Fill = New Fill(Color.White)
   ' Associate this curve with the Y2 axis
   myCurve.IsY2Axis = True
   ' Associate this curve with the second Y2 axis
   myCurve.YAxisIndex = 1
   
   ' Show the x axis grid
   myPane.XAxis.MajorGrid.IsVisible = True
   
   ' Make the Y axis scale red
   myPane.YAxis.Scale.FontSpec.FontColor = Color.Red
   myPane.YAxis.Title.FontSpec.FontColor = Color.Red
   ' turn off the opposite tics so the Y tics don't show up on the Y2 axis
   myPane.YAxis.MajorTic.IsOpposite = False
   myPane.YAxis.MinorTic.IsOpposite = False
   ' Don't display the Y zero line
   myPane.YAxis.MajorGrid.IsZeroLine = False
   ' Align the Y axis labels so they are flush to the axis
   myPane.YAxis.Scale.Align = AlignP.Inside
   myPane.YAxis.Scale.Max = 100
   
   ' Enable the Y2 axis display
   myPane.Y2Axis.IsVisible = True
   ' Make the Y2 axis scale blue
   myPane.Y2Axis.Scale.FontSpec.FontColor = Color.Blue
   myPane.Y2Axis.Title.FontSpec.FontColor = Color.Blue
   ' turn off the opposite tics so the Y2 tics don't show up on the Y axis
   myPane.Y2Axis.MajorTic.IsOpposite = False
   myPane.Y2Axis.MinorTic.IsOpposite = False
   ' Display the Y2 axis grid lines
   myPane.Y2Axis.MajorGrid.IsVisible = True
   ' Align the Y2 axis labels so they are flush to the axis
   myPane.Y2Axis.Scale.Align = AlignP.Inside
   myPane.Y2Axis.Scale.Min = 1.5
   myPane.Y2Axis.Scale.Max = 3
   
   ' Create a second Y Axis, green
   Dim yAxis3 As New YAxis("Distance, m")
   myPane.YAxisList.Add(yAxis3)
   yAxis3.Scale.FontSpec.FontColor = Color.Green
   yAxis3.Title.FontSpec.FontColor = Color.Green
   yAxis3.Color = Color.Green
   ' turn off the opposite tics so the Y2 tics don't show up on the Y axis
   yAxis3.MajorTic.IsInside = False
   yAxis3.MinorTic.IsInside = False
   yAxis3.MajorTic.IsOpposite = False
   yAxis3.MinorTic.IsOpposite = False
   ' Align the Y2 axis labels so they are flush to the axis
   yAxis3.Scale.Align = AlignP.Inside
   
   Dim yAxis4 As New Y2Axis("Energy")
   yAxis4.IsVisible = True
   myPane.Y2AxisList.Add(yAxis4)
   ' turn off the opposite tics so the Y2 tics don't show up on the Y axis
   yAxis4.MajorTic.IsInside = False
   yAxis4.MinorTic.IsInside = False
   yAxis4.MajorTic.IsOpposite = False
   yAxis4.MinorTic.IsOpposite = False
   ' Align the Y2 axis labels so they are flush to the axis
   yAxis4.Scale.Align = AlignP.Inside
   yAxis4.Type = AxisType.Log
   yAxis4.Scale.Min = 100
   
   ' Fill the axis background with a gradient
   myPane.Chart.Fill = New Fill(Color.White, Color.LightGoldenrodYellow, 45.0F)
   
   zgc.AxisChange()

End Sub

Go back to Sample Graphs

Personal tools