c#chart表设计

90e家 2021-04-14 01:25:07
想达到下图的效果,主要是Y轴的格式化,x轴为时间,y轴中x为正常范围,如20,如波动为0.5,1sd就是 20.5,2sd就是21,依次类推,
目前问题,积分不多,望搞过的大佬给指点指点;
1、Y轴本身为各种数值,如何呈现这种效果的
2、X轴用的是日期,年月日这种,如何呈现这种效果;



目前达到的效果:







后台代码:
  private void LoadForm()
{

chart1.Series.Clear();

ChartHelper.AddSeries(chart1, "折线图", SeriesChartType.Line, Color.Red, Color.Red);
ChartHelper.SetTitle(chart1, "折线图", new Font("微软雅黑", 12), Docking.Bottom, Color.Black);
ChartHelper.SetStyle(chart1, Color.Transparent, Color.White);
ChartHelper.SetLegend(chart1, Docking.Top, StringAlignment.Center, Color.Transparent, Color.Black);
ChartHelper.SetXY(chart1, "日期", "值", StringAlignment.Far, Color.Black, Color.Black, AxisArrowStyle.None, 1, 2);
//网格这是
ChartHelper.SetMajorGrid(chart1, Color.Gray, 1, 0.5, ChartDashStyle.Dash, ChartDashStyle.NotSet);

//标记点设置
chart1.Series[0].MarkerSize = 8;//标记点大小
chart1.Series[0].MarkerStyle = MarkerStyle.Circle; //标记点类型
//提示
chart1.Series[0].ToolTip = "线:#SER\nx: #VALX\ny:#VALY";

//Y轴最大值和最小值
chart1.ChartAreas[0].AxisY.Maximum = 22;
chart1.ChartAreas[0].AxisY.Minimum = 18;
chart1.ChartAreas[0].AxisY.ArrowStyle = AxisArrowStyle.None; //箭头样式
//绑定值
chart1.Series["折线图"].Points.DataBind(listDemo.AsEnumerable(), "StartDate", "ValueInt", "");

//设置警戒线
double max = 20;
StripLine stripMax = new StripLine();
//stripMax.Text = string.Format("最大:{0:F}", max);//展示文本
stripMax.Font = new Font("宋体", 20);//文本字体
stripMax.BackColor = Color.FromArgb(208, 109, 106);//背景色
stripMax.Interval = 0;//间隔
stripMax.IntervalOffset = max;//偏移量
stripMax.StripWidth = 0.01;//线宽
// stripMax.ForeColor = Color.White;//前景色
//stripMax.TextAlignment = StringAlignment.Near;//文本对齐方式
//

chart1.ChartAreas[0].AxisY.StripLines.Add(stripMax);//添加到ChartAreas中
stripMax = new StripLine();
stripMax.IntervalOffset = max + 0.5;
chart1.ChartAreas[0].AxisY.StripLines.Add(stripMax);//添加到ChartAreas中


}
List<Demo> listDemo = new List<Demo>();
private void InitData()
{
List<double> y = new List<double>() { 18.5, 19, 19.5, 20, 20.5, 21, 21.5 };
Random random = new Random();
for (int i = 0; i < 12; i++)
{
Demo demo = new Demo();
int index= random.Next(y.Count());
demo.ValueInt = y[index];
demo.StartDate = DateTime.Now.AddDays(i);
if (i == 3)
{
demo.ValueInt = 1;

}
listDemo.Add(demo);
}

//绑定数据
}

...全文
298 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
90e家 2021-04-16
  • 打赏
  • 举报
回复
引用 8 楼 Six-Classics-note-Me 的回复:
看看这个能不能帮到你。 https://blog.csdn.net/helloapplepear/article/details/48295359 不过他是自定义的x轴,你可以改变一下。
这个试过了,应该是可以的,但是定义后什么都不显示,具体原因不明确!
six2me 2021-04-16
  • 打赏
  • 举报
回复
看看这个能不能帮到你。 https://blog.csdn.net/helloapplepear/article/details/48295359 不过他是自定义的x轴,你可以改变一下。
90e家 2021-04-16
  • 打赏
  • 举报
回复
现在主要解决刻度问题了,20换成X,20.5换成1SD,21 换成2SD 怎么格式化的不知道啊,日期轴都无所谓了
90e家 2021-04-16
  • 打赏
  • 举报
回复
引用 5 楼 Six-Classics-note-Me 的回复:
这个和你提供的数据有关系的,如果吧你的数据更集中一些,就是偏移在小一些试一试,另外,我说的8条包含,你的红,绿,蓝色的直线也是要画出来的。是直观提示你的数据是否进入设定限值的,能直观看出是否有不合格数据。 还有就是不理想,你要弄清楚,你的理想图形和你的这个图形的区别是什么。
哪个没啥关系,警示线20位置我已经画了一个了,其他的以此类推即可,主要是解决坐标刻度问题了
six2me 2021-04-16
  • 打赏
  • 举报
回复
这个和你提供的数据有关系的,如果吧你的数据更集中一些,就是偏移在小一些试一试,另外,我说的8条包含,你的红,绿,蓝色的直线也是要画出来的。是直观提示你的数据是否进入设定限值的,能直观看出是否有不合格数据。 还有就是不理想,你要弄清楚,你的理想图形和你的这个图形的区别是什么。
90e家 2021-04-15
  • 打赏
  • 举报
回复
提供两条数据就是这了,现在要解决的是X轴和Y轴格式化的问题了,哈哈
90e家 2021-04-15
  • 打赏
  • 举报
回复
引用 2 楼 Six-Classics-note-Me 的回复:
你要的曲线图实际上是多个曲线,好像是8个,其中6个是固定的应该代表最小上、下限,上、下限,最大上下限,还有就是你的带数据的2条曲线,都是要单独画的,你现在才画了一条线,另外你的3,4点的数据好像随机的远了吧,最好调试下看你的值是多少?
那是两条,大哥,3那个点是我故意设置 的,现在已经能达到这种效果了,但是还是不理想啊
six2me 2021-04-15
  • 打赏
  • 举报
回复
你要的曲线图实际上是多个曲线,好像是8个,其中6个是固定的应该代表最小上、下限,上、下限,最大上下限,还有就是你的带数据的2条曲线,都是要单独画的,你现在才画了一条线,另外你的3,4点的数据好像随机的远了吧,最好调试下看你的值是多少?
90e家 2021-04-15
  • 打赏
  • 举报
回复
这玩意难么,没大佬给指点指点么

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧