我有一个c# RangeBar chart
,在AxisX上有大约25个标签。根据我的实时数据,其中一些标签在图表中具有可见的数据点。通常,25个标签中的大约3/4没有任何数据点。启用了所有水平网格线,这使图表有些混乱。特别是对于在AxisY上更远的数据点,很难一眼就分辨出它们属于AxisX上的标签。
我的想法是通过给网格线赋予不同的颜色,不同的样式来区分具有可见数据点的AxisX标签,或者完全删除没有相应数据点的AxisX标签的网格线。这有可能吗?因为到目前为止,我发现的所有可控属性和文档都与整个图表的网格线样式有关。
Btw:不能仅显示具有数据点的AxisX标签。 预先感谢。
答案 0 :(得分:1)
要减少混乱,可以使用axis.Interval
属性。
但每行行仍将具有相同样式,无论是主行还是副行。
您可以为所选点添加VerticalLineAnnotations
或尝试StripLines
。两者都可以自由设置样式。
Annotations
或Striplines
可以达到相同的结果。蓝线是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
上,并且会移动,例如调整图表大小时。.