C# 用mschart C绘制极坐标图#
我目前正在做一个项目,我需要用动态生成的数据创建一个极坐标图。我已经成功地创建了一个稍微像样的极坐标图,但无法创建所需的。 这是我用来设置中间偏移量的代码:C# 用mschart C绘制极坐标图#,c#,charts,mschart,C#,Charts,Mschart,我目前正在做一个项目,我需要用动态生成的数据创建一个极坐标图。我已经成功地创建了一个稍微像样的极坐标图,但无法创建所需的。 这是我用来设置中间偏移量的代码: public Form1() { InitializeComponent(); chart1.ChartAreas[0].AxisX.MajorTickMark.Enabled = false; chart1.ChartAreas[0].AxisX.MajorGrid.Ena
public Form1()
{
InitializeComponent();
chart1.ChartAreas[0].AxisX.MajorTickMark.Enabled = false;
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisY.Minimum = -20;
chart1.ChartAreas[0].AxisY.MajorGrid.IntervalOffset = 15;
chart1.ChartAreas[0].AxisY.MajorGrid.Interval = 5;
chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Solid;
chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Solid;
}
我在这里找到了一些帮助:
我举了一个例子来说明我是如何尝试得到极光的:
我认为除了最小值之外,你无法从任何地方创建轴 (链接的贴子仅使标签从不同的值开始。) 因此,我们必须帮助业主绘制一点图纸 一些简短的参考资料:
var ca = chart1.ChartAreas[0];
var ax = ca.AxisX;
var ay = ca.AxisY;
现在,让我们隐藏y轴:
ay.LineWidth = 0;
要绘制从间隔偏移到最大值的轴部分,我们只需对PostPaint
事件进行编码:
private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
// add references..
..
// then use values to calulate pixel coordinates..
int py1 = (int)ay.ValueToPixelPosition(ay.Minimum + ay.IntervalOffset);
int py2 = (int)ay.ValueToPixelPosition(ay.Maximum);
int px = (int)ax.ValueToPixelPosition(ax.Maximum - ax.Minimum);
// blue to make it stand out
e.ChartGraphics.Graphics.DrawLine(Pens.Blue, px, py1, px, py2);
}
结果:
当然,为间隔
、间隔偏移量
、最小值
和最大值
找到正确的值完全取决于您
更新:如果你想拥有一整套缩短的x轴网格线,你可以做大量的数学运算或使用图形变换。与往常一样,后者要容易得多
Graphics g = e.ChartGraphics.Graphics;
int pyc = (int)ay.ValueToPixelPosition(ay.Minimum); // y-center
for (int i = 0; i < 360 / ax.Interval; i++)
{
g.TranslateTransform(px, pyc);
g.RotateTransform((float)(i * ax.Interval));
g.TranslateTransform(-px, -pyc);
g.DrawLine(Pens.colorOfYourChoice, px, py1, px, py2);
g.ResetTransform();
}
Graphics g=e.ChartGraphics.Graphics;
int pyc=(int)ay.ValueToPixelPosition(ay.Minimum);//y中心
对于(int i=0;i<360/ax.Interval;i++)
{
g、 翻译形式(px,pyc);
g、 旋转变换((浮动)(i*最大间隔));
g、 翻译形式(-px,-pyc);
g、 抽绳(钢笔。颜色由您选择,px,py1,px,py2);
g、 ResetTransform();
}
设置后ax.Interval=30代码>我们得到这个结果:
我认为除了最小值之外,你无法从任何地方创建轴
(链接的贴子仅使标签从不同的值开始。)
因此,我们必须帮助业主绘制一点图纸
一些简短的参考资料:
var ca = chart1.ChartAreas[0];
var ax = ca.AxisX;
var ay = ca.AxisY;
现在,让我们隐藏y轴:
ay.LineWidth = 0;
要绘制从间隔偏移到最大值的轴部分,我们只需对PostPaint
事件进行编码:
private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
// add references..
..
// then use values to calulate pixel coordinates..
int py1 = (int)ay.ValueToPixelPosition(ay.Minimum + ay.IntervalOffset);
int py2 = (int)ay.ValueToPixelPosition(ay.Maximum);
int px = (int)ax.ValueToPixelPosition(ax.Maximum - ax.Minimum);
// blue to make it stand out
e.ChartGraphics.Graphics.DrawLine(Pens.Blue, px, py1, px, py2);
}
结果:
当然,为间隔
、间隔偏移量
、最小值
和最大值
找到正确的值完全取决于您
更新:如果你想拥有一整套缩短的x轴网格线,你可以做大量的数学运算或使用图形变换。与往常一样,后者要容易得多
Graphics g = e.ChartGraphics.Graphics;
int pyc = (int)ay.ValueToPixelPosition(ay.Minimum); // y-center
for (int i = 0; i < 360 / ax.Interval; i++)
{
g.TranslateTransform(px, pyc);
g.RotateTransform((float)(i * ax.Interval));
g.TranslateTransform(-px, -pyc);
g.DrawLine(Pens.colorOfYourChoice, px, py1, px, py2);
g.ResetTransform();
}
Graphics g=e.ChartGraphics.Graphics;
int pyc=(int)ay.ValueToPixelPosition(ay.Minimum);//y中心
对于(int i=0;i<360/ax.Interval;i++)
{
g、 翻译形式(px,pyc);
g、 旋转变换((浮动)(i*最大间隔));
g、 翻译形式(-px,-pyc);
g、 抽绳(钢笔。颜色由您选择,px,py1,px,py2);
g、 ResetTransform();
}
设置后ax.Interval=30代码>我们得到这个结果:
你解决了你的问题吗?有点,我想把整数放在中间。这意味着什么?去图表的中心还是坐在轴的中间?这些似乎是x轴标签。在极坐标图上,MSChart不允许移动轴,也不允许使用辅助轴。因此,只有解决办法是可行的:要么用第二个图表区覆盖,要么用拉丝将标签拉长。两者都很棘手,可能不值得麻烦。你解决了你的问题吗?有点,我想把整数放在中间。这意味着什么?去图表的中心还是坐在轴的中间?这些似乎是x轴标签。在极坐标图上,MSChart不允许移动轴,也不允许使用辅助轴。因此,只有解决办法是可行的:要么用第二个图表区覆盖,要么用拉丝将标签拉长。这两种方法都很棘手,可能不值得费心。有没有办法设置X轴的间隔?这样就有了从第一个圆到最后一个圆的线,在每一个角度都画出了?OBS!我知道我可以设置X轴间隔,但它会更改角度间隔。我想知道的是,我是否可以改变通常从中心到边缘绘制的线的长度,在每个角度。我更新了答案,包括一整套x轴网格线。谢谢!但是为什么/怎么得到g?哎呀,是e.ChartGraphics.Graphics。有没有设置X轴的间隔?这样就有了从第一个圆到最后一个圆的线,在每一个角度都画出了?OBS!我知道我可以设置X轴间隔,但它会更改角度间隔。我想知道的是,我是否可以改变通常从中心到边缘绘制的线的长度,在每个角度。我更新了答案,包括一整套x轴网格线。谢谢!但是你为什么/怎么得到g?哎呀,是e.ChartGraphics.Graphics。