2017-03-29 29 views
0

私は.Net Chartsを使用しています。その中で、私は28日の間隔で折れ線グラフを表示しました。ここで.Net Charts - 異なる間隔のX軸

は私のコードです:

Chart1.ChartAreas["ChartArea1"].AxisX.IntervalOffset = 1; 
Chart1.ChartAreas["ChartArea1"].AxisX.Minimum = min; 
Chart1.ChartAreas["ChartArea1"].AxisX.Maximum = max; 
Chart1.ChartAreas["ChartArea1"].AxisX.Interval = 28; 

しかし、私の状況の一つは、異なる間隔を持っている可能性があり

28日間隔、35日間隔、28日間隔など、のようです。

+0

いいえ、間隔はAxisプロパティであり、1つしか存在できません。 – TaW

+0

問題を解決しましたか? – TaW

答えて

0

IntervalAxis財産であり、唯一があることができます。

図表グリッド線とラベルでこの制限を回避することができます。


あなたはGridLineを表示する場所のは、あなたがDataPointsの指標、すなわち、ストップ・ポイントのリストを持っていると仮定しましょう:

List<int> stops = new List<int>(); 

をいくつかのテスト番号stops.AddRange(new[] { 12, 23, 42, 52, 82 });を追加した後、我々はPostPaintをコーディングすることができますChartの行を描画するイベント:

private void chart_PostPaint(object sender, ChartPaintEventArgs e) 
{ 
    Graphics g = e.ChartGraphics.Graphics; 
    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; 

    ChartArea ca = chart.ChartAreas[0]; 

    Font font = ca.AxisX.LabelStyle.Font; 
    Color col = ca.AxisX.MajorGrid.LineColor; 
    int padding = 10; // pad the labels from the axis 

    double aymin = ca.AxisY.Minimum; 
    double aymax = ca.AxisY.Maximum; 

    int y0 = (int)ca.AxisY.ValueToPixelPosition(aymin); 
    int y1 = (int)ca.AxisY.ValueToPixelPosition(aymax); 

    foreach (int sx in stops) 
    { 
     int x = (int)ca.AxisX.ValueToPixelPosition(chart.Series[0].Points[sx].XValue); 

     using (Pen pen = new Pen(col)) 
      g.DrawLine(pen, x, y0, x, y1); 

     string s = chart.Series[0].Points[sx].XValue + ""; 
     if (ca.AxisX.LabelStyle.Format != "") s = string.Format(ax.LabelStyle.Format, s); 

     SizeF sz = g.MeasureString(s, font, 999); 
     g.DrawString(s, font, Brushes.Black, (int)(x - sz.Width/2) , y0 + padding); 
    } 
} 

元の0をオフにした後

enter image description here

注:など。

ChartArea ca = chart.ChartAreas[0]; 

ca.AxisX.MajorGrid.Enabled = false; 
ca.AxisX.MajorTickMark.Enabled = false; 
ca.AxisX.LabelStyle.Enabled = false; 

..thisは結果である

  • コードのほとんどは、単純な準備と言及しています。実際の描画座標を取得するための2つの方法と、3つのまたは4つ以上のライン..

  • ある私は私のリストにDataPointインデックスを格納しています。カスタムGridLinesDataPointsから独立させたい場合は、Valuesを保存し、リストをList<double>に変更し、chart.Series[0].Points[sx].XValue の2つの参照をストップ値sxに直接アクセスすることができます。

  • 変更あなたに合うようにパディング値..

  • 我々は、彼らが実際にAutoに設定されている場合でも、自由にAxesの最小値と最大値の値にアクセスすることができます。これは、Paintイベントに参加しているためです。それ以外の場合は、ChartAreaRecalculateAxesScale()に電話する必要があります。

  • Blackラベルブラシも同様に動的にしてください。

+0

こんにちはTaW、ご回答いただきありがとうございます。 Intervalを使用する代わりに、このようなコードを変更しました。Chart1.Series ["Series1"]。Points.AddXY(weekEndDate、DT1.Rows [i] ["VALUE"]。ToString());それで、間隔に違いがありますが、何の問題もなくバインドされています。 – RobinHood

関連する問題