C# Winform 简单四步玩转DevExpress自定义曲线趋势图

C# Winform 简单四步玩转DevExpress自定义曲线趋势图

1、初始化曲线数,趋势图颜色

 int LineCount = 5;//曲线数量
 List<Series> list = new List<Series> { };
 var cls = ColorHelper.GetRGBColors(LineCount);
 List<Color> colors = new List<Color>();
 colors.Add(ColorTranslator.FromHtml("#BA0400"));
 colors.Add(ColorTranslator.FromHtml("#FDB600"));
 colors.Add(ColorTranslator.FromHtml("#03AF4C"));
 colors.Add(ColorTranslator.FromHtml("#0270B0"));
 colors.Add(ColorTranslator.FromHtml("#6A2A91"));
 for (int i = 0; i < LineCount; i++)
 {
     Series LineItem = CreateSeries("变量" + (i + 1), ViewType.Line, colors[i]);
     list.Add(LineItem);
 }

2、生成图表

/// <summary>
/// 根据图形对象创建一个图表
/// </summary>
/// <param name="chartControl">图表绑定控件</param>
/// <param name="list">图表中的图形展现</param>
/// <returns></returns>
private void CreateChart(ChartControl chartControl, List<Series> list)

    chartControl.Series.AddRange(list.ToArray());
    chartControl.Legend.Visibility = DefaultBoolean.False;
    chartControl.SeriesTemplate.LabelsVisibility = DefaultBoolean.False;
    chartControl.SeriesTemplate.CrosshairEnabled = DefaultBoolea
    chartControl1.SeriesTemplate.SeriesDataMember = "ShowId";
    chartControl1.SeriesTemplate.ArgumentDataMember = "SampleOn";
    chartControl1.SeriesTemplate.ValueDataMembers.AddRange("Value");
    chartControl1.SeriesTemplate.View = new LineSeriesView();
    chartControl1.SeriesTemplate.ArgumentScaleType = ScaleType.DateTime;
    chartControl1.SeriesTemplate.ValueScaleType = ScaleType.Num
    var dia = chartControl1.Diagram as XYDiagram;
    if (null != dia)
    {
      dia.AxisX.DateTimeScaleOptions.ScaleMode = ScaleMode.Manual;
      dia.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Second;
      dia.AxisX.DateTimeScaleOptions.MeasureUnitMultiplier = 1;
      dia.AxisX.VisualRange.AutoSideMargins = true;
      dia.AxisX.WholeRange.AutoSideMargins = true;
      dia.EnableAxisXScrollin
      dia.AxisY.WholeRange.AutoSideMargins = true;
      dia.AxisY.VisualRange.AutoSideMargins = true;
      dia.AxisY.NumericScaleOptions.MeasureUnit = NumericMeasureUnit.Ones;
 
  	// 十字线选项包含指定十字线标签组标题文本的模式:
    chartControl.CrosshairOptions.GroupHeaderPattern = "{A}";
    // 系列的属性设置十字准线元素的文本的格式:
    chartControl.SeriesTemplate.CrosshairLabelPattern = "{S}: {V:F2}";
    chartControl.SeriesTemplate.CrosshairEmptyValueLegendText = "{S}: {V:F2}";
    chartControl.SeriesTemplate.CrosshairContentShowMode = CrosshairContentShowMode.Legend;
    chartControl.SeriesTemplate.CrosshairHighlightPoints = DefaultBoolean.False;
    // 该轴提供了格式化“十字准线轴标签”文本的属性:
    ((XYDiagram)chartControl.Diagram).AxisY.CrosshairAxisLabelOptions.Pattern = "{
    //删除之前的第二坐标系,如果不删除会一直重复添加
    ((XYDiagram)chartControl.Diagram).SecondaryAxesY.C
    chartControl.Dock = DockStyl
    for (int i = 0; i < list.Count; i++)
        CreateAxisY(chartControl, li
}

3、创建图表的第二坐标系

/// <summary>
/// 创建图表的第二坐标系
/// </summary>
/// <param name="series">Series对象</param>
/// <returns></returns>
private SecondaryAxisY CreateAxisY(ChartControl chartControl, Series series)
{
    SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
    ((XYDiagram)chartControl.Diagram).SecondaryAxesY.Add(myAxis);
    //判断图形对象是柱状图还是折线图
    Type type = series.View.GetType();
    if (type == typeof(SideBySideBarSeriesView))
    {
        ((BarSeriesView)series.View).AxisY = myAxis;
    }
    else
    {
        ((LineSeriesView)series.View).AxisY = myAxis;

    
    myAxis.Title.Text = series.Name;
    myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
    myAxis.Title.Visibility = DefaultBoolean.True; //显示标题
    myAxis.Title.Font = new Font("微软雅黑", 10.0f);
    Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致
    myAxis.Title.TextColor = color;
    myAxis.Label.TextColor = color;
    myAxis.Color = color;
    return myAxis;
}

4、画线

 /// <summary>
 /// 根据数据创建一个图形展现
 /// </summary>
 /// <param name="caption">图形标题</param>
 /// <param name="viewType">图形类型</param>
 /// <param name="rowIndex">图形数据的行序号</param>
 /// <returns></returns>
 public Series CreateSeries(string caption, ViewType viewType, Color _color)
 {
     Series series = new Series(caption, viewType);
     series.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.True;
     series.CrosshairLabelPattern = "{S}: {V
     ((LineSeriesView)series.View).LineStyle.Thicknes
     series.View.Color = _color;
     //必须设置ArgumentScaleType的类型,否则显示会转换为日期格式,导致不是希望的格式显示
     //也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitative
     series.ArgumentScaleType = ScaleType.DateTime;
     series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;//显示标注标签
     series.Label.TextPattern = "{S}:{V} {VP:P2}";
     series.ArgumentDataMember = "SampleOn";
     series.ValueDataMembers.AddRange("Va
     return series;
 }
 /// <summary>
 /// 每条线数据源数据
 /// </summary>
 Dictionary<string, List<PointData>> PointDatas = new Dictionary<string, List<PointData>>();

结果

image-20210315102749285

随机高区分颜色生成见:C# 生成具有高区分的随机颜色值

posted @ 2021-03-15 10:39  MarkYUN  阅读(1078)  评论(0)    收藏  举报