Microsoft图表控件:多系列和缩放
本文关键字:系列 缩放 控件 Microsoft | 更新日期: 2023-09-27 17:57:29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms.DataVisualization.Charting;
using System.Windows.Forms;
using System.Drawing;
using System.Threading;
namespace testC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}`
Random rand = new Random();
Random random = new Random();
private void Form1_Load(object sender, EventArgs e)
{
Chart crt = this.chart1;
//первый график ==================================================
ChartArea chartArea = new ChartArea();
chartArea.Name = "Main";
///
chartArea.AxisY.IsStartedFromZero = false;
///// join other charts ////
chartArea.InnerPlotPosition.Auto = true;
///// Scroll /////
chartArea.CursorX.IsUserEnabled = true;
chartArea.CursorX.IsUserSelectionEnabled = true;
chartArea.AxisX.ScaleView.Zoomable = true;
chartArea.AxisX.ScrollBar.IsPositionedInside = true;
//// Style ////
chartArea.AxisX.LineColor = Color.Gray;
chartArea.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
chartArea.AxisX.MajorGrid.LineColor = Color.Gray;
chartArea.AxisY.LineColor = Color.Gray;
chartArea.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
chartArea.AxisY.MajorGrid.LineColor = Color.Gray;
crt.ChartAreas.Add(chartArea);
Legend L = new Legend("Main");
L.DockedToChartArea = "Main";
L.Alignment = StringAlignment.Near;
L.Docking = Docking.Top;
L.IsDockedInsideChartArea = true;
crt.Legends.Add(L);
Series S = new Series("Main");
S.IsXValueIndexed = true;
S.ChartArea = "Main";
S.Legend = "Main";
S.ChartType = SeriesChartType.Line;
S.Color = Color.Red;
S.XValueType = ChartValueType.DateTime;
crt.Series.Add(S);
//// Line1 график ========================
/**/ String SeriesName = "Line1";
Series v = new Series(SeriesName);
//v.IsXValueIndexed = true;
v.ChartArea = "Main";
v.Legend = "Main";
v.ChartType = SeriesChartType.Line;
v.Color = Color.Blue;
v.LegendToolTip = SeriesName;
v.LegendText = SeriesName;
v.XValueType = ChartValueType.DateTime;
crt.Series.Add(v);
Thread myThread = new Thread(new ThreadStart(FillData));
myThread.Name = "TestChartin in Thread";
myThread.Start();
}
private void FillData()
{
for (int day = 1; day <= 90; day++)
{
AddPoint("Line1", day, random.Next(8000, 8200));
AddPoint("Main", day, random.Next(8000, 8200));
}
}
public bool AddPoint(string series, double time, double P)
{
chart1.InvokeIfNeeded(() =>
{
chart1.Series[series].Points.AddXY(time, P);
});
return true;
}
}
}
谁知道如何在一张图表上建立多系列图表?上面的代码只有在我用一个serias(Main(运行时才有效,但当我用两个系列(Main和Line1(运行时,这个程序会崩溃。
关于缩放的附录:当我放大或某个值攀升到图表上边框上方时,图表的Y比例不会自动改变。
问题:如何设置图表的自动Y刻度?
您的代码崩溃,因为您要将第二系列的图例设置为不存在的图例。
在此处比较您的代码:
String SeriesName = "Line1";
..
v.Legend = SeriesName;
你为第一个系列写的东西:
Legend L = new Legend("Main");
..
S.Legend = "Main";
您已选择"Main"作为Legend
的名称,因此可以使用它。
您所需要做的就是将其设置为相同的Legend
,因为它应该是:
v.Legend = L.Name;
还要注意,您没有在代码中清除默认的Legend
和ChartArea
。也许你是在设计师那里做的?这是代码需要完成的两行代码,它们属于所有其他代码:
crt.Legends.Clear(L);
crt.ChartAread.Clear(L);