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>>();
结果

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

浙公网安备 33010602011771号