控制单个网格线的视觉样式
Control visual styles of individual gridlines
我有一个 c# RangeBar chart
在 AxisX 上有大约 25 个标签。根据我的实时数据,其中一些标签在图表中有可见的数据点。通常,25 个标签中大约有 3/4 没有任何数据点。所有水平网格线都已启用,这使得图表有点混乱。尤其是在AxisY上距离较远的数据点,很难一眼分辨出它们属于AxisX上的什么标签。
我的想法是区分具有可见数据点的 AxisX 标签,方法是为它们的网格线提供不同的颜色、不同的样式,或者完全删除没有相应数据点的 AxisX 标签的网格线。这可能吗?因为到目前为止我找到的所有可控属性和文档都是关于整个图表的网格线样式。
顺便说一句:仅显示具有数据点的 AxisX 标签不是一种选择。
提前致谢。
要减少混乱,您可以使用 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
也是,但是 重复 间隔。为了避免可见的重复,每个都需要有合适的 offsets 和 intervals 来确定每个。但是这两种方式都不难。
另请注意,这两种类型的线都是 锚定 到它们的 DataPoints
并将 移动 与它们一起,例如调整图表大小时..
我有一个 c# RangeBar chart
在 AxisX 上有大约 25 个标签。根据我的实时数据,其中一些标签在图表中有可见的数据点。通常,25 个标签中大约有 3/4 没有任何数据点。所有水平网格线都已启用,这使得图表有点混乱。尤其是在AxisY上距离较远的数据点,很难一眼分辨出它们属于AxisX上的什么标签。
我的想法是区分具有可见数据点的 AxisX 标签,方法是为它们的网格线提供不同的颜色、不同的样式,或者完全删除没有相应数据点的 AxisX 标签的网格线。这可能吗?因为到目前为止我找到的所有可控属性和文档都是关于整个图表的网格线样式。
顺便说一句:仅显示具有数据点的 AxisX 标签不是一种选择。 提前致谢。
要减少混乱,您可以使用 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
也是,但是 重复 间隔。为了避免可见的重复,每个都需要有合适的 offsets 和 intervals 来确定每个。但是这两种方式都不难。
另请注意,这两种类型的线都是 锚定 到它们的 DataPoints
并将 移动 与它们一起,例如调整图表大小时..