c# - 使用 mschart C# 绘制极坐标图
问题描述
我目前正在做一个项目,我需要用动态生成的数据创建一个极坐标图。我设法创建了一个不错的极地图,但无法创建所需的内容。 这是我的极地图
这是我用来在中间设置偏移量的代码:
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;
}
我在这里找到了一些帮助:如何在极坐标 Mchart 上移动 Y 轴的原点?
我有一个关于如何尝试获取极地的示例: 完成的示例
解决方案
我不认为你可以让一个轴从任何地方开始,除了它的最小值。
(链接的帖子仅使标签从不同的值开始。)
所以我们将不得不帮助一些所有者绘图。
一些简短的参考:
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;
我们得到这样的结果:
推荐阅读
- mysql - mycli - 不能不显示 unicode 消息
- javascript - 为用户名验证创建正则表达式
- r - 如何通过在 R 或 MATLAB 中一次添加每个点来动画 3D 散点图
- terminal - 不小心删除了 var/lib 中的一些文件
- python - python是否有时会关闭自动打开的文件
- python - KeyError: '标签 [False] 不在 [index] 中'
- javascript - 是否可以与 navigator.share 共享文件(PDF)而不是 url?
- stripe-payments - Stripe connect 用于拆分付款
- python - 基于两个 numpy 数组更改了 x 轴脊椎颜色
- javascript - 如何在此处禁用滚轮放大地图javascript