c# 怎么画两组数据的曲线图 10
两组数据,x[100]={0,1,2,3,4,……},y[100]={……}。x轴:角度。y轴:值。Y值有正有负,excel画出来是一条比较光滑的曲线。...
两组数据,x[100]={0,1,2,3,4,……},y[100]={……}。x轴:角度。y轴:值。Y值有正有负,excel画出来是一条比较光滑的曲线。
展开
4个回答
展开全部
C#.NET 2003结合dundas组件实现
曲线实现核心代码,以前也用vml整理过
private void view_duns()//by wyw308将右边listbox的项目显示成曲线
{
Chart1.Series.Clear();
Chart1.Legends["Default"].Docking=LegendDocking.Bottom;
Chart1.ChartAreas["Default"].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount; //by wyw308网格粗细
int m_count=lst_view.Items.Count;
// foreach(ListItem itmsel in lst_view.Items)//by wyw308循环组件的方式,不好
for(int i=0;i<m_count;i++)
{
// add_ser(Chart1,itmsel.Value,itmsel.Text);
add_ser(Chart1,lst_view.Items[i].Value,lst_view.Items[i].Text);//by wyw308添加serries
if(ckb_v.Checked)//by wyw308是否多y轴显示
{
// Set custom chart area position
Chart1.ChartAreas["Default"].Position = new ElementPosition(20,10,68,82);
Chart1.ChartAreas["Default"].InnerPlotPosition = new ElementPosition(5,0,90,75);
// Create extra Y axis for second and third series
// CreateYAxis(Chart1, Chart1.ChartAreas["Default"], Chart1.Series[name], 7+i*5, 8);
if(i>0)
CreateYAxis(Chart1, Chart1.ChartAreas["Default"],Chart1.Series[lst_view.Items[i].Text],8+(20-8)*i/m_count,9); //by wyw308动态显示Y轴位置
}
}
}
private void add_ser(Dundas.Charting.WebControl.Chart ds_chart,string code,string name)//by wyw308添加曲线的series
{
string dt_1=dtp_s.Value.ToString("yyyy-MM-dd").Replace("-","");
string dt_2=dtp_e.Value.ToString("yyyy-MM-dd").Replace("-","");
string sql="Select "+
" t1.NAME 指标名称,t1.UNIT 单位,t1.CODE 指标代码,"+
" t2.NOW_VALUE 日值,"+
// " to_char(t2.INCEPT_DATE,'mm-dd') 接收日期"+
" to_char(t2.INCEPT_DATE,'mm-dd') 接收日期"+
" From sts_dtarget t1,sts_dayvalues t2"+
" Where to_char(t2.INCEPT_DATE,'yyyymmdd')>='"+dt_1+"' And to_char(t2.INCEPT_DATE,'yyyymmdd')<='"+dt_2+"'And t2.CODE='"+code+"' And t1.code=t2.code order by t2.INCEPT_DATE";
MyOraComm.ConnForOracle cfo=new MyOraComm.ConnForOracle("dbf_connstr");
DataSet ds=cfo.ReturnDataSet(sql,"ser");
ds_chart.Series.Add(name);
ds_chart.Series[name].Type = SeriesChartType.Line;
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
ds_chart.Series[name].Points.AddXY(ds.Tables[0].Rows[i]["接收日期"],ds.Tables[0].Rows[i]["日值"]);
// ds_chart.Series[name].Points.AddXY(DateTime.Parse(ds.Tables[0].Rows[i]["接收日期"].ToString()),ds.Tables[0].Rows[i]["日值"]);
// ds_chart.Series[name].Points.AddY(ds.Tables[0].Rows[i]["日值"]);
ds_chart.Series[name].ToolTip = "#SERIESNAME\nX:#AXISLABEL\nY:#VALY";//by wyw308显示提示信息
// ds_chart.ChartAreas["Default"].AxisX.LabelStyle.Format = "ddd";//by wyw308格式化数据,没效果
// ds_chart.ChartAreas["Default"].AxisX.LabelStyle.ShowEndLabels = false;
}
cfo.CloseConn();
}
曲线实现核心代码,以前也用vml整理过
private void view_duns()//by wyw308将右边listbox的项目显示成曲线
{
Chart1.Series.Clear();
Chart1.Legends["Default"].Docking=LegendDocking.Bottom;
Chart1.ChartAreas["Default"].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount; //by wyw308网格粗细
int m_count=lst_view.Items.Count;
// foreach(ListItem itmsel in lst_view.Items)//by wyw308循环组件的方式,不好
for(int i=0;i<m_count;i++)
{
// add_ser(Chart1,itmsel.Value,itmsel.Text);
add_ser(Chart1,lst_view.Items[i].Value,lst_view.Items[i].Text);//by wyw308添加serries
if(ckb_v.Checked)//by wyw308是否多y轴显示
{
// Set custom chart area position
Chart1.ChartAreas["Default"].Position = new ElementPosition(20,10,68,82);
Chart1.ChartAreas["Default"].InnerPlotPosition = new ElementPosition(5,0,90,75);
// Create extra Y axis for second and third series
// CreateYAxis(Chart1, Chart1.ChartAreas["Default"], Chart1.Series[name], 7+i*5, 8);
if(i>0)
CreateYAxis(Chart1, Chart1.ChartAreas["Default"],Chart1.Series[lst_view.Items[i].Text],8+(20-8)*i/m_count,9); //by wyw308动态显示Y轴位置
}
}
}
private void add_ser(Dundas.Charting.WebControl.Chart ds_chart,string code,string name)//by wyw308添加曲线的series
{
string dt_1=dtp_s.Value.ToString("yyyy-MM-dd").Replace("-","");
string dt_2=dtp_e.Value.ToString("yyyy-MM-dd").Replace("-","");
string sql="Select "+
" t1.NAME 指标名称,t1.UNIT 单位,t1.CODE 指标代码,"+
" t2.NOW_VALUE 日值,"+
// " to_char(t2.INCEPT_DATE,'mm-dd') 接收日期"+
" to_char(t2.INCEPT_DATE,'mm-dd') 接收日期"+
" From sts_dtarget t1,sts_dayvalues t2"+
" Where to_char(t2.INCEPT_DATE,'yyyymmdd')>='"+dt_1+"' And to_char(t2.INCEPT_DATE,'yyyymmdd')<='"+dt_2+"'And t2.CODE='"+code+"' And t1.code=t2.code order by t2.INCEPT_DATE";
MyOraComm.ConnForOracle cfo=new MyOraComm.ConnForOracle("dbf_connstr");
DataSet ds=cfo.ReturnDataSet(sql,"ser");
ds_chart.Series.Add(name);
ds_chart.Series[name].Type = SeriesChartType.Line;
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
ds_chart.Series[name].Points.AddXY(ds.Tables[0].Rows[i]["接收日期"],ds.Tables[0].Rows[i]["日值"]);
// ds_chart.Series[name].Points.AddXY(DateTime.Parse(ds.Tables[0].Rows[i]["接收日期"].ToString()),ds.Tables[0].Rows[i]["日值"]);
// ds_chart.Series[name].Points.AddY(ds.Tables[0].Rows[i]["日值"]);
ds_chart.Series[name].ToolTip = "#SERIESNAME\nX:#AXISLABEL\nY:#VALY";//by wyw308显示提示信息
// ds_chart.ChartAreas["Default"].AxisX.LabelStyle.Format = "ddd";//by wyw308格式化数据,没效果
// ds_chart.ChartAreas["Default"].AxisX.LabelStyle.ShowEndLabels = false;
}
cfo.CloseConn();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把函数公式贴出来看看呗
更多追问追答
追问
公式很复杂,两组数据没有必然联系。
追答
winform还是webform,还是说跟这个没关系只是想要个思路?
简单的做法是用Graphic构建绘画对象来画曲线用于画线定位的点越多画出来的曲线越光滑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询