[英]Polar Plot with 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;
}
我在這里找到了一些幫助: 如何在極性Mschart上移動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;
我們得到以下結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.