ん、Interval
がAxis
財産であり、唯一があることができます。
図表グリッド線とラベルでこの制限を回避することができます。
あなたは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をオフにした後
注:など。
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
インデックスを格納しています。カスタムGridLines
をDataPoints
から独立させたい場合は、Values
を保存し、リストをList<double>
に変更し、chart.Series[0].Points[sx].XValue
の2つの参照をストップ値sx
に直接アクセスすることができます。
変更あなたに合うようにパディング値..
我々は、彼らが実際にAuto
に設定されている場合でも、自由にAxesの最小値と最大値の値にアクセスすることができます。これは、Paint
イベントに参加しているためです。それ以外の場合は、ChartArea
のRecalculateAxesScale()
に電話する必要があります。
Black
ラベルブラシも同様に動的にしてください。
出典
2017-03-30 10:48:27
TaW
いいえ、間隔はAxisプロパティであり、1つしか存在できません。 – TaW
問題を解決しましたか? – TaW