C# Chart控件的使用方法

来源:互联网 发布:大数据世界小说 编辑:程序博客网 时间:2024/06/06 00:26

第一个简单的chart: spline// Create new data series and set it's visual attributes
        Series series = new Series("Spline");
        series.ChartType = SeriesChartType.Spline;
        series.BorderWidth = 3;
        series.ShadowOffset = 2;

        // Populate new series with data
        series.Points.AddY(67);
        series.Points.AddY(57);
        series.Points.AddY(83);
        series.Points.AddY(23);
        series.Points.AddY(70);
        series.Points.AddY(60);
        series.Points.AddY(90);
        series.Points.AddY(20);

        // Add series into the chart's series collection
        Chart1.Series.Add(series);

同时显示2条曲线
// Populate series with random data
        Random random = new Random();
        for (int pointIndex = 0; pointIndex < 10; pointIndex++)
        {
            Chart1.Series["Series1"].Points.AddY(random.Next(45, 95));
            Chart1.Series["Series2"].Points.AddY(random.Next(5, 75));
        }

        // Set series chart type
        Chart1.Series["Series1"].ChartType = SeriesChartType.Line;
        Chart1.Series["Series2"].ChartType = SeriesChartType.Spline;

        // Set point labels
        Chart1.Series["Series1"].IsValueShownAsLabel = true;
        Chart1.Series["Series2"].IsValueShownAsLabel = true;

        // Enable X axis margin
        Chart1.ChartAreas["ChartArea1"].AxisX.IsMarginVisible = true;

        // Enable 3D, and show data point marker lines
        Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
        Chart1.Series["Series1"]["ShowMarkerLines"] = "True";
        Chart1.Series["Series2"]["ShowMarkerLines"] = "True";

显示column类型图
// Create new data series and set it's visual attributes
        Series series = new Series("FlowRead");
        series.ChartType = SeriesChartType.Column;
        series.BorderWidth = 3;
        series.ShadowOffset = 2;

        // Populate new series with data
        series.Points.AddY(67);
        series.Points.AddY(57);
        series.Points.AddY(83);
        series.Points.AddY(23);
        series.Points.AddY(70);
        series.Points.AddY(60);
        series.Points.AddY(90);
        series.Points.AddY(20);

        // Add series into the chart's series collection
        Chart1.Series.Add(series);

很多点,效率还可以
// Fill series data
        double yValue = 50.0;
        Random random = new Random();
        for (int pointIndex = 0; pointIndex < 20000; pointIndex++)
        {
            yValue = yValue + (random.NextDouble() * 10.0 - 5.0);
            Chart1.Series["Series1"].Points.AddY(yValue);
        }

        // Set fast line chart type
        Chart1.Series["Series1"].ChartType = SeriesChartType.FastLine;

    }

日期,xy类型
// Create a new random number generator
        Random rnd = new Random();

        // Data points X value is using current date
        DateTime date = DateTime.Now.Date;

        // Add points to the stock chart series
        for (int index = 0; index < 10; index++)
        {
            Chart1.Series["Series1"].Points.AddXY(
                date,                // X value is a date
                rnd.Next(40, 50));    // Close Y value

            // Add 1 day to our X value
            date = date.AddDays(1);
        }

int-int的xy数据绘图
// Create a new random number generator
        Random rnd = new Random();

        // Add points to the stock chart series
        for (int index = 0; index < 10; index++)
        {
            Chart1.Series["Series1"].Points.AddXY(
                rnd.Next(10, 90),                // X value is a date
                rnd.Next(40, 50));    // Close Y value
        }

数据库数据,datetime-int类型
string connStr = "server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
        SqlConnection myConn = new SqlConnection(connStr);
        string selStr = "select 时间,序号 from pub_log_read order by 序号 asc";
        SqlCommand myCmd = myConn.CreateCommand();
        myCmd.CommandText = selStr;
        myConn.Open();
        SqlDataReader sdr = myCmd.ExecuteReader(CommandBehavior.CloseConnection);

// Since the reader implements and IEnumerable, pass the reader directly into
        // the DataBindTable method with the name of the Column to be used as the XValue
        Chart1.DataBindTable(sdr, "时间");

        sdr.Close();
        myConn.Close();

数据库数据2,string-int类型
string connStr = "server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
        SqlConnection myConn = new SqlConnection(connStr);
        string selStr = "select 帐号,count(帐号) as 次数 from pub_log_read group by 帐号 order by 帐号 asc";
        SqlCommand myCmd = myConn.CreateCommand();
        myCmd.CommandText = selStr;
        myConn.Open();
        SqlDataReader sdr = myCmd.ExecuteReader(CommandBehavior.CloseConnection);

        // Since the reader implements and IEnumerable, pass the reader directly into
        // the DataBindTable method with the name of the Column to be used as the XValue
        Chart1.DataBindTable(sdr, "帐号");

        sdr.Close();
        myConn.Close();

数据库绑定3-error?
string connStr = "server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
        SqlConnection myConn = new SqlConnection(connStr);
        string selStr = "select 帐号,count(帐号) as 次数 from pub_log_read group by 帐号 order by 帐号 asc";
        SqlCommand myCmd = myConn.CreateCommand();
        myCmd.CommandText = selStr;
        myConn.Open();

        // Set chart data source
        Chart1.DataSource = myCmd;

        // Set series members names for the X and Y values
        Chart1.Series["Series1"].XValueMember = "帐号";
        Chart1.Series["Series1"].YValueMembers = "次数";

        // Data bind to the selected data source
        Chart1.DataBind();
        myConn.Close();

数据库4,只绑定y
string connStr = "server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
        SqlConnection myConn = new SqlConnection(connStr);
        string selStr = "select 序号 from pub_log_read order by 序号 asc";
        SqlCommand myCmd = myConn.CreateCommand();
        myCmd.CommandText = selStr;
        myConn.Open();
        SqlDataReader sdr = myCmd.ExecuteReader(CommandBehavior.CloseConnection);

        // Since the reader implements and IEnumerable, pass the reader directly into
        // the DataBindTable method with the name of the Column to be used as the XValue
        Chart1.Series[0].Points.DataBindY(sdr);

        sdr.Close();
        myConn.Close();

数据库5,绑定xy
string connStr = "server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
        SqlConnection myConn = new SqlConnection(connStr);
string selStr = "select 帐号,count(帐号) as 次数 from pub_log_read group by 帐号 order by 帐号 desc";
        SqlCommand myCmd = myConn.CreateCommand();
        myCmd.CommandText = selStr;
        myConn.Open();
        SqlDataReader sdr = myCmd.ExecuteReader(CommandBehavior.CloseConnection);

        // Since the reader implements and IEnumerable, pass the reader directly into
        // the DataBindTable method with the name of the Column to be used as the XValue
        Chart1.Series[0].Points.DataBindXY(sdr, "帐号",sdr,"次数");

        sdr.Close();
        myConn.Close();

数据库6,支持显示参数
// Resolve the address to the Access database
    string fileNameString = this.MapPath(".");
    fileNameString += "..\\..\\..\\data\\chartdata.mdb";

    // Initialize a connection string  
    string myConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileNameString;
  
    // Define the database query  
    string mySelectQuery="SELECT * FROM REPSALES WHERE Year=2004;";

    // Create a database connection object using the connection string  
    OleDbConnection myConnection = new OleDbConnection(myConnectionString);
  
    // Create a database command on the connection using query  
    OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
  
    // Open the connection  
    myCommand.Connection.Open();
  
    // Create a database reader  
    OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
  
    // Since the reader implements and IEnumerable, pass the reader directly into
    // the DataBind method with the name of the Columns assigned to the appropriate property  
    Chart1.Series["Series1"].Points.DataBind(
        myReader,
        "Name",
        "Sales",
        "Tooltip=Year, Label=Commissions{C2}");

    // Close the reader and the connection
    myReader.Close();
    myConnection.Close();

数据库7,支持多line
// Resolve the address to the Access database
    string fileNameString = this.MapPath(".");
    fileNameString += "..\\..\\..\\data\\chartdata.mdb";

    // Initialize a connection string  
    string myConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileNameString;
  
    // Define the database query  
    string mySelectQuery="SELECT * FROM REPSALES;";

    // Create a database connection object using the connection string  
    OleDbConnection myConnection = new OleDbConnection(myConnectionString);
  
    // Create a database command on the connection using query  
    OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
  
    // Open the connection  
    myCommand.Connection.Open();
  
    // Create a database reader  
    OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
  
    // Data bind chart to a table where all rows are grouped in series by the "Name" column
    Chart1.DataBindCrossTable(
        myReader,
        "Name",
        "Year",
        "Sales",
        "Label=Commissions{C}");

    // Close the reader and the connection
    myReader.Close();
    myConnection.Close();

数据库8,按照行添加数据
// Resolve the address to the Access database
    string fileNameString = this.MapPath(".");
    fileNameString += "..\\..\\..\\data\\chartdata.mdb";

    // Initialize a connection string  
    string myConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileNameString;

    // Define the database query  
    string mySelectQuery="SELECT * FROM SALESCOUNTS;";

    // Create a database connection object using the connection string  
    OleDbConnection myConnection = new OleDbConnection(myConnectionString);
  
    // Create a database command on the connection using query  
    OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
  
    // Open the connection  
    myCommand.Connection.Open();
  
    // Initializes a new instance of the OleDbDataAdapter class
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
    myDataAdapter.SelectCommand = myCommand;

    // Initializes a new instance of the DataSet class
    DataSet myDataSet = new DataSet();

    // Adds rows in the DataSet
    myDataAdapter.Fill(myDataSet, "Query");  
  
    foreach(DataRow row in myDataSet.Tables["Query"].Rows)
    {
        // For each Row add a new series
        string seriesName = row["SalesRep"].ToString();
        Chart1.Series.Add(seriesName);
        Chart1.Series[seriesName].ChartType = SeriesChartType.Line;
        Chart1.Series[seriesName].BorderWidth = 2;

        for(int colIndex = 1; colIndex < myDataSet.Tables["Query"].Columns.Count; colIndex++)
        {
            // For each column (column 1 and onward) add the value as a point
            string columnName = myDataSet.Tables["Query"].Columns[colIndex].ColumnName;
            int YVal = (int) row[columnName];

            Chart1.Series[seriesName].Points.AddXY(columnName, YVal);
        }
    }

    DataGrid.DataSource = myDataSet;
    DataGrid.DataBind();

    // Closes the connection to the data source. This is the preferred
    // method of closing any open connection.
    myCommand.Connection.Close();

使用xml数据
// resolve the address to the XML document
    string fileNameString = this.MapPath(".");
    string fileNameSchema = this.MapPath(".");
    fileNameString += "..\\..\\..\\data\\data.xml";
    fileNameSchema += "..\\..\\..\\data\\data.xsd";

    // Initializes a new instance of the DataSet class
    DataSet custDS = new DataSet();
      
    // Read XML schema into the DataSet.
    custDS.ReadXmlSchema( fileNameSchema );

    // Read XML schema and data into the DataSet.
    custDS.ReadXml( fileNameString );
          
    // Initializes a new instance of the DataView class
    DataView firstView = new DataView(custDS.Tables[0]);

    // Since the DataView implements and IEnumerable, pass the reader directly into
    // the DataBindTable method with the name of the column used for the X value. 
    Chart1.DataBindTable(firstView, "Name");

使用excel数据
// resolve the address to the Excel file
    string fileNameString = this.MapPath(".");
    fileNameString += "..\\..\\..\\data\\ExcelData.xls";

    // Create connection object by using the preceding connection string.
    string sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
        fileNameString + ";Extended Properties="Excel 8.0;HDR=YES"";
    OleDbConnection myConnection = new OleDbConnection( sConn );
    myConnection.Open();

    // The code to follow uses a SQL SELECT command to display the data from the worksheet.
    // Create new OleDbCommand to return data from worksheet.
    OleDbCommand myCommand = new OleDbCommand( "Select * From [data1$A1:E25]", myConnection );

    // create a database reader  
    OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

    // Populate the chart with data in the file
    Chart1.DataBindTable(myReader, "HOUR");

    // close the reader and the connection
    myReader.Close();
    myConnection.Close();

使用csv数据
// Filename of the CSV file
    string file = "DataFile.csv";

    // Get the path of the CSV file
    string path = this.MapPath(".");
    path += "..\\..\\..\\data\";

    // Create a select statement and a connection string.
    string mySelectQuery = "Select * from " + file;
    string ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
        path+ ";Extended Properties="Text;HDR=No;FMT=Delimited"";
    OleDbConnection myConnection = new OleDbConnection(ConStr);

    // Create a database command on the connection using query
    OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);

    // Open the connection and create the reader
    myCommand.Connection.Open();
    OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

    // Column 1 is a time value, column 2 is a double
    // Databind the reader to the chart using the DataBindXY method
    Chart1.Series[0].Points.DataBindXY(myReader, "1", myReader, "2");

    // Close connection and data reader
    myReader.Close();
    myConnection.Close();

数组绘图
// Initialize an array of doubles
        double[] yval = { 2, 6, 4, 5, 3 };

        // Initialize an array of strings
        string[] xval = { "Peter", "Andrew", "Julie", "Mary", "Dave" };

        // Bind the double array to the Y axis points of the Default data series
        Chart1.Series["Series1"].Points.DataBindXY(xval, yval);
数据库9,dataview// Resolve the address to the Access database
    string fileNameString = this.MapPath(".");
    fileNameString += "..\\..\\..\\data\\chartdata.mdb";

    // Initialize a connection string  
    string myConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileNameString;
              
    // Define the database query  
    string mySelectQuery="SELECT * FROM REPS;";

    // Create a database connection object using the connection string  
    OleDbConnection myConnection = new OleDbConnection(myConnectionString);
              
    // Create a database command on the connection using query  
    OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
              
    // Open the connection  
    myCommand.Connection.Open();
              
    // Initializes a new instance of the OleDbDataAdapter class
    OleDbDataAdapter custDA = new OleDbDataAdapter();
    custDA.SelectCommand = myCommand;

    // Initializes a new instance of the DataSet class
    DataSet custDS = new DataSet();

    // Adds rows in the DataSet
    custDA.Fill(custDS, "Customers");

    // Initializes a new instance of the DataView class
    DataView firstView = new DataView(custDS.Tables[0]);

    // Since the DataView implements IEnumerable, pass the dataview directly into
    //   the DataBind method with the name of the Columns selected in the query  
    Chart1.Series["Default"].Points.DataBindXY(firstView, "Name",firstView, "Sales");

    // Closes the connection to the data source. This is the preferred
    //   method of closing any open connection.
    myCommand.Connection.Close();


指定坐标轴的数据显示范围
// Create a new random number generator
        Random rnd = new Random();

        // Add points to the stock chart series
        for (int index = 0; index < 10; index++)
        {
            Chart1.Series["Series1"].Points.AddXY(
                rnd.Next(10, 90),                // X value is a date
                rnd.Next(40, 50));    // Close Y value
        }

        Chart1.ChartAreas[0].AxisY.Minimum = 40;
        Chart1.ChartAreas[0].AxisY.Maximum = 50;

数据排序// Use point index for drawing the chart
    Chart1.Series["Series1"].IsXValueIndexed = true;

    // Sort series points by second Y value
    Chart1.DataManipulator.Sort(PointSortOrder.Ascending, "Y2", "Series1");

查找数据最大值和最小值
// Find point with maximum Y value and change color
    DataPoint maxValuePoint = Chart1.Series["Series1"].Points.FindMaxValue();
    maxValuePoint.Color = Color.FromArgb(255, 128, 128);
                                                                                              
    // Find point with minimum Y value and change color
    DataPoint minValuePoint = Chart1.Series["Series1"].Points.FindMinValue();
    minValuePoint.Color = Color.FromArgb(128, 128, 255);

pie显示交互
private void Page_Load(object sender, System.EventArgs e)
{
    // Add series to the chart
    Series series = Chart1.Series.Add("My series");

    // Set series and legend tooltips
    series.ToolTip = "#VALX: #VAL{C} million";
    series.LegendToolTip = "#PERCENT";
    series.PostBackValue = "#INDEX";
    series.LegendPostBackValue = "#INDEX";
          
    // Populate series data
    double[]    yValues = {65.62, 75.54, 60.45, 34.73, 85.42, 32.12, 55.18, 67.15, 56.24, 23.65};
    string[]    xValues = {"France", "Canada", "Germany", "USA", "Italy", "Russia", "China", "Japan", "Sweden", "Spain" };
    series.Points.DataBindXY(xValues, yValues);

    // Set series visual attributes
    series.Type = SeriesChartType.Pie;
    series.ShadowOffset = 2;
    series.BorderColor = Color.DarkGray;
    series.CustomAttributes = "LabelStyle=Outside";
}

protected void Chart1_Click(object sender, ImageMapEventArgs e)
{
    int pointIndex = int.Parse(e.PostBackValue);
    Series series = Chart1.Series["My series"];
    if (pointIndex >= 0 && pointIndex < series.Points.Count)
    {
        series.Points[pointIndex].CustomProperties += "Exploded=true";
    }
}

chart点击事件/// <summary>
/// Page Load event handler.
/// </summary>
protected void Page_Load(object sender, System.EventArgs e)
{
    this.Chart1.Click += new ImageMapEventHandler(Chart1_Click);
  
    // direct using of PostBackValue
    foreach (Series series in this.Chart1.Series)
    {
        series.PostBackValue = "series:" + series.Name + ",#INDEX";
    }
  
    // transfer of click coordinates. getCoordinates is a javascript function.
    string postbackScript = ClientScript.GetPostBackEventReference(this.Chart1, "chart:@");
    this.Chart1.Attributes["onclick"] = postbackScript.Replace("@'", "' + getCoordinates(event)");

}


/// <summary>
/// Handles the Click event of the Chart1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Web.UI.WebControls.ImageMapEventArgs"/> instance containing the event data.</param>
protected void Chart1_Click(object sender, ImageMapEventArgs e)
{
    this.Chart1.Titles["ClickedElement"].Text = "Nothing";

    string[] input = e.PostBackValue.Split(':');
    if (input.Length == 2)
    {
        string[] seriesData = input[1].Split(',');
        if (input[0].Equals("series"))
        {
            this.Chart1.Titles["ClickedElement"].Text = "Last Clicked Element: " + seriesData[0] + " - Data Point #" + seriesData[1];
        }
        else if (input[0].Equals("chart"))
        {
            // hit test of X and Y click point
            HitTestResult hitTestResult = this.Chart1.HitTest(Int32.Parse(seriesData[0]), Int32.Parse(seriesData[1]));
            if (hitTestResult != null)
            {
                this.Chart1.Titles["ClickedElement"].Text = "Last Clicked Element: " + hitTestResult.ChartElementType.ToString();
            }
        }
    }
}

原创粉丝点击