我正在实时使用图表,通过单独的线程来提供。但是每次我添加另一个系列和图例时,图例都会使图表变小。我找不到任何解决方案。
这是我在添加任何系列之前设置图表的功能:
chart1.BackColor = Color.DarkGray;
chart1.ForeColor = Color.White;
chart1.ChartAreas[0].BackColor = Color.WhiteSmoke;
chart1.ChartAreas[0].AxisX.LabelStyle.ForeColor = Color.White;
chart1.ChartAreas[0].AxisX.LineColor = Color.White;
chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.DarkGray;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
chart1.ChartAreas[0].AxisY.LabelStyle.ForeColor = Color.White;
chart1.ChartAreas[0].AxisY.LineColor = Color.White;
chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.DarkGray;
chart1.ChartAreas[0].AxisX.Interval = 5;
chart1.ChartAreas[0].AxisX.IntervalOffset = 1;
chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Seconds;
//SetX();
DateTime act = DateTime.Now;
DateTime max = act.AddSeconds(60);
//DateTime min = act.AddSeconds(-30);
chart1.ChartAreas[0].AxisX.Minimum = act.ToOADate();
chart1.ChartAreas[0].AxisX.Maximum = max.ToOADate();
当我添加系列/点时:
if (chart1.Legends.IndexOf(name) == -1)
{
//Legend
chart1.Legends.Add(name);
chart1.Legends[name].Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Left;
chart1.Legends[name].LegendStyle = System.Windows.Forms.DataVisualization.Charting.LegendStyle.Column;
}
// Must exists
if (chart1.Series.IndexOf(name) == -1)
{
// Series
chart1.Series.Add(name);
chart1.Series[name].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StepLine;
chart1.Series[name].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime;
chart1.Series[name].BorderWidth = 4;
chart1.Series[name].Legend = name;
}
DateTime act = DateTime.Now;
//Get value from string
switch (format)
{
case "BOOL":
int boolval = value.ToUpper() == "TRUE" ? 1 : 0;
chart1.Series[name].Points.AddXY(act, boolval);
break;
case "DEC":
int intval = Int32.Parse(value);
chart1.Series[name].Points.AddXY(act, intval);
break;
case "FLOAT":
float fvalue = float.Parse(value);
chart1.Series[name].Points.AddXY(act, fvalue);
break;
}
if (act.ToOADate() >= chart1.ChartAreas[0].AxisX.Maximum)
{
SetX();
}
无此行:
chart1.Series[name].Legend = name;
似乎将所有图例连接到一个“ DIV”中,但仍然总是以缩小图表的方式堆叠图例:
图片在这一行。
如何设置图例,以免更改图表的大小?
答案 0 :(得分:2)
您将需要控制ChartArea
的位置和大小。
这是通过将Position
中的Automatic
设置为固定值来完成的。
请注意,ChartArea.Position
是ElementPosition
,它是
ClientRectangle
。示例:
ChartArea ca = chart1.ChartAreas[0];
ca.Position = new ElementPosition(3, 13, 96, 84);
这会在所有面上留下3%的填充,并将ChartArea
下移10%。
您将需要使用数字,并可能在需要第二行Legends
或LegendItems
时进行调整。
默认情况下,系统将一个LegendItem添加到默认Legend中。如果需要更多控制,可以添加自定义LegendItems。有关更多信息,请参见here。
默认情况下,系统会调整ChartArea
的位置,使其很好地适合默认的Legend
。看起来您所做的比代码中显示的要多。