C# 图表-在图形上方设置网格
我正在使用Visual Studio中的C# 图表-在图形上方设置网格,c#,charts,C#,Charts,我正在使用Visual Studio中的System.Windows.Forms.DataVisualization.ChartingC#库。 但是,创建图形本身并没有问题,因为我使用的是SeriesChartType.StackedArea100用于我的系列(总是100%填充垂直图形空间),网格(X&Y)完全被图形覆盖 但是,我希望X网格位于图形上方,这样更容易看到哪个点属于哪个 我是否遗漏了一些明显的内容?网格线总是在数据点下绘制 一个选项是使数据点的颜色半透明 以下是一个例子: 您可以将
System.Windows.Forms.DataVisualization.Charting
C#库。
但是,创建图形本身并没有问题,因为我使用的是SeriesChartType.StackedArea100
用于我的系列(总是100%填充垂直图形空间),网格(X&Y)完全被图形覆盖
但是,我希望X网格位于图形上方,这样更容易看到哪个点属于哪个
我是否遗漏了一些明显的内容?
网格线总是在数据点下绘制
一个选项是使数据点的颜色
半透明
以下是一个例子:
您可以将alpha提高到224,仍然可以看到这些线
或者您可以在一个xxxPaint
事件中所有者绘制网格线
;但这当然有点复杂。好的,还有很多
图形本身是常规GDI+图形,带有两个循环中的DrawLine
调用
但要获得正确的循环和坐标,您需要:
- 确保您知道/控制轴的
最小值
,最大值
和间隔
。如果它们没有设置,但仍在其自动值上,则需要找到一种方法来获取它们李>
- 知道
InnerPlotPosition
的矩形(以像素(!)为单位)。请参阅,以了解将对您有所帮助的两个功能李>
以下是一个例子:
您可以使数据点颜色为半透明。或者在“后期绘制”事件中绘制网格。您可以通过图表上的工具提示来显示数据点值。@TaW:听起来不错,您自己有没有办法用该事件绘制网格?图表为CursorX.IsUserSelectionEnabled=true
,因此用户可以选择图表的范围,放大并滚动。如何开始在适当的X坐标上绘制适当数量的直线和曲线?有没有什么可以让我省去自己完全实施它的工作@sowjanyaattaluri:谢谢,我已经在这么做了,但是我使用了超过20个系列,所以每次查看工具提示都会变得单调乏味。谢谢你!我猜画网格线是通过标准的钢笔和画笔来完成的?如果我不能实现它,我将求助于使用降低不透明度的颜色。这非常有用,非常感谢您的所有努力,现在这个问题在各个方面都彻底解决了。
chart1.ApplyPaletteColors(); // necessary to access the original colors
if (checkBox1.Checked)
{
foreach (Series s in chart1.Series) s.Color = Color.FromArgb(192, s.Color);
}
private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
if (checkBox1.Checked) return;
ChartArea ca = chart1.ChartAreas[0];
RectangleF ipar = InnerPlotPositionClientRectangle(chart1, ca);
Axis ax = ca.AxisX;
Axis ay = ca.AxisY;
Color gc = ax.MajorGrid.LineColor;
Pen pen = new Pen(gc);
double ix = ax.Interval == 0 ? 1 : ax.Interval; // best make sure to set..
double iy = ay.Interval == 0 ? 50 : ay.Interval; // ..the intervals!
for (double vx = ax.Minimum; vx <= ax.Maximum; vx+= ix)
{
int x = (int)ax.ValueToPixelPosition(vx) + 1;
e.ChartGraphics.Graphics.DrawLine(pen, x, ipar.Top, x, ipar.Bottom);
}
for (double vy = ay.Minimum; vy <= ay.Maximum; vy += iy)
{
int y = (int)ay.ValueToPixelPosition(vy) + 1;
e.ChartGraphics.Graphics.DrawLine(pen, ipar.Left, y, ipar.Right, y);
}
pen.Dispose();
}
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisX.LineColor = Color.Transparent;
chart1.ChartAreas[0].AxisY.LineColor = Color.Transparent;