我目前正在开展一个项目,我需要在其中创建一个动态生成数据的Polar Plot。我已经设法创造了一个有点像样的极地情节,但无法创造所需的东西。 This is my Polar Plot
这是我用来在中间设置偏移量的代码:
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;
}
我在这里找到了一些帮助:How to displace the origin of the Y axis on a polar Mschart?
我举了一个关于我如何试图获得极地的例子: The finished example
答案 0 :(得分:2)
我不认为你可以从任何地方开始一个轴,但它是最小的。
(链接的帖子只会使标签从不同的值开始。)
所以我们必须帮助一点主人画画。
一些简短的参考文献:
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);
}
结果:
当然,找到Interval
,IntervalOffset
,Minimum
和Maximum
的正确值取决于您...
更新:如果您想拥有一整套缩短的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();
}
设置ax.Interval = 30;
后,我们得到了这个结果: