问题描述
最近在自学C#,想编写一个自动控制原理的单回路控制系统,输出曲线想画出来类似于下图的样子:但是自己不是特别会编写图形显示的代码,偶然查到c#里面的chart控件就可以很好的显示图形,但是我弄到现在的成果如下图所示:在显示区域的点间隔太稀疏了,一页上面只能显示5个点,我想请教一下怎么样可以把数据点之间的间隔缩小,最好可以让输出曲线达到稳定的时候在一页上就可以显示出来,不用前后拖动滚动条请大神指教呀,万分感激!
解决方案
解决方案二:
//使用方法DataTable_统计报表_for_chart=newDataTable();_统计报表_for_chart.Columns.Add(newDataColumn("照明分控点",typeof(string)));_统计报表_for_chart.Columns.Add(newDataColumn("耗电量(度)",typeof(double)));for(inti=0;i<_表格.Count;i++){DataRownewrow=_统计报表_for_chart.NewRow();newrow["照明分控点"]=_表格[i].照明分控点.Trim();newrow["耗电量(度)"]=_表格[i].耗电量;_统计报表_for_chart.Rows.Add(newrow);}//让X轴显示滚动条,适合非常多的X轴坐标,前提是要先runwizard,要先有一个已经存在的series。XYDiagramxyDiagram1=chartControl1.DiagramasXYDiagram;xyDiagram1.AxisX.Range.Auto=false;//要开启滚动条必须将其设置为falsexyDiagram1.AxisX.Range.MaxValueInternal=30.5D>(9+1)?(29+1):30.5D;//在不拉到滚动条的时候,X轴显示多个值,既固定的X轴长度。20150305,加大到29+1的时候,横轴的刻度间隔就比较小了,基本可以满意。xyDiagram1.AxisX.Range.MinValueInternal=-0.5D;xyDiagram1.AxisX.Range.ScrollingRange.Auto=false;xyDiagram1.AxisX.Range.ScrollingRange.MaxValueSerializable=(9+1).ToString();//整个X轴最多显示多多少个值xyDiagram1.AxisX.Range.ScrollingRange.MinValueSerializable="0";xyDiagram1.AxisX.Range.ScrollingRange.SideMarginsEnabled=true;//是否从X轴原点开始显示xyDiagram1.AxisX.Range.SideMarginsEnabled=false;xyDiagram1.AxisX.VisibleInPanesSerializable="-1";//xyDiagram1.AxisY.NumericOptions.Format=DevExpress.XtraCharts.NumericFormat.Percent;//显示为百分数xyDiagram1.AxisY.Range.Auto=true;//xyDiagram1.AxisY.Range.MaxValueSerializable="1.02";//固定Y轴的高度//xyDiagram1.AxisY.Range.MinValueSerializable="0.5";xyDiagram1.AxisY.Range.ScrollingRange.SideMarginsEnabled=true;xyDiagram1.AxisY.Range.SideMarginsEnabled=true;xyDiagram1.AxisY.VisibleInPanesSerializable="-1";xyDiagram1.EnableAxisXScrolling=true;//启用滚动条if(ChartTool.是否第一次==false&&chartControl1.Series!=null){chartControl1.Series.Clear();}chartControl1.CreateSeries(_输入的年月+"耗电量折线图",ViewType.Line,_统计报表_for_chart,"照明分控点","耗电量(度)");
//封装的类publicstaticclassChartTool{publicstaticbool是否第一次=true;publicstaticvoidCreateSeries(thisChartControlchat,stringseriesName,ViewTypeseriesType,objectdataSource,stringxBindName,stringyBindName){CreateSeries(chat,seriesName,seriesType,dataSource,xBindName,yBindName,null);//这里调用了下面的重载函数:CreateSeries}publicstaticvoidCreateSeries(thisChartControlchat,stringseriesName,ViewTypeseriesType,objectdataSource,stringxBindName,stringyBindName,Action<Series>createSeriesRule){if(chat==null)thrownewArgumentNullException("chat");if(string.IsNullOrEmpty(seriesName))thrownewArgumentNullException("seriesType");if(string.IsNullOrEmpty(xBindName))thrownewArgumentNullException("xBindName");if(string.IsNullOrEmpty(yBindName))thrownewArgumentNullException("yBindName");if(chat.Series!=null&&是否第一次==true){是否第一次=false;chat.Series.RemoveAt(0);//移除在runwizard里面的默认的第一个Series,以免影响视线。}Series_series=newSeries(seriesName,seriesType);_series.ArgumentScaleType=ScaleType.Qualitative;_series.ArgumentDataMember=xBindName;_series.ValueDataMembers[0]=yBindName;_series.DataSource=dataSource;if(createSeriesRule!=null)createSeriesRule(_series);chat.Series.Add(_series);}}
注意,以上是针对devexpress的chartcontrol控件的代码,不适合用于微软的chart控件。提供你参考。