控制各个网格线的视觉样式

时间:2018-11-28 13:46:05

标签: c# winforms charts gridlines

我有一个c# RangeBar chart,在AxisX上有大约25个标签。根据我的实时数据,其中一些标签在图表中具有可见的数据点。通常,25个标签中的大约3/4没有任何数据点。启用了所有水平网格线,这使图表有些混乱。特别是对于在AxisY上更远的数据点,很难一眼就分辨出它们属于AxisX上的标签。

我的想法是通过给网格线赋予不同的颜色,不同的样式来区分具有可见数据点的AxisX标签,或者完全删除没有相应数据点的AxisX标签的网格线。这有可能吗?因为到目前为止,我发现的所有可控属性和文档都与整个图表的网格线样式有关。

Btw:不能仅显示具有数据点的AxisX标签。 预先感谢。

1 个答案:

答案 0 :(得分:1)

要减少混乱,可以使用axis.Interval属性。

每行行仍将具有相同样式,无论是主行还是副行。

您可以为所选点添加VerticalLineAnnotations或尝试StripLines。两者都可以自由设置样式。

这是正常折线图的示例,其中线随机添加到几个点: enter image description here

AnnotationsStriplines可以达到相同的结果。蓝线是StripLine,红线是Annotations。以下是向DataPoint添加彩色线条的两个功能:

void AddStripLine(Chart chart, ChartArea ca, DataPoint dp, Color col)
{
    Axis ax = ca.AxisX;
    StripLine sl = new StripLine();
    sl.BorderColor = col;
    sl.IntervalOffset = dp.XValue;
    sl.Interval = 0;
    sl.StripWidth  = 0;
    sl.BorderWidth  = 1;
    ax.StripLines.Add(sl);
}

如果仔细观察,您会发现唯一的视觉差异是前者在下方,后者在所有其他图表元素上方。

void AddAnnotation(Chart chart, ChartArea ca, DataPoint dp, Color col)
{
    Axis ay = ca.AxisY;
    VerticalLineAnnotation vl = new VerticalLineAnnotation();
    vl.LineColor = col;
    vl.AnchorDataPoint = dp;
    vl.IsInfinitive = true;
    vl.LineWidth = 1;
    vl.Height = ay.Maximum - ay.Minimum;
    vl.ClipToChartArea = ca.Name;
    chart.Annotations.Add(vl);
}

对于Bar图表,请使用HorizontalLineAnnotations并锚定到正确的轴...

实际上,使用Annotatons是更自然的方法,因为每个对象都是一个单独的对象。 StripLines也是,但每隔重复。为了避免出现重复现象,每个人都需要具有合适的偏移量间隔来确定。但这两种方法都不难。

还请注意,这两种类型的线都固定到了它们的DataPoints上,并且会移动,例如调整图表大小时。.