12

作成しているWinformsアプリでMSチャートコントロールを使用しています。私が表示している散布図のX軸コンポーネントは、最終的にUTC時間を表すInt64データです。そのInt64データを取得し、基本的にDataTime.FromFileTimeUTC(theTime).ToString()を実行して、意味のあるエンドユーザーのX軸ラベルを表示したいと思います。

現在、メモリ内のDataTableに別の列を作成して、そのInt64と同等のDateTimeを次のように保持しています。

dataTable.Columns.Add("mytimestamp");
foreach (DataRow dr in dataTable.Rows)
{
   dr["mytimestamp"] = DateTime.FromFileTimeUTC(Convert.ToInt64(dr["theint64val"].ToString()));
}

次に、「mytimestamp」列をx軸の値として使用します。これは正常に機能し、x軸ラベルを日時値として表示できます。

しかし、列を作成して他の列のデータを本質的に複製するという問題を経験したくはありませんが、x軸ラベルをフォーマットする方法がわかりませんでした。これを見逃したかもしれない、と私は思った。ドキュメントでAxisViewChangedイベントを確認し、そのデータでグラフのタイトルを設定する方法を確認しましたが、x軸ラベル自体は設定しませんでした。

何か案は?

4

2 に答える 2

6

私は非常に遅れていますが、これが他の人に役立つことを願っています...

chart.FormatNumberこれを行う可能な方法は、イベントをサブスクライブすることです。たとえば、次のようになります。

void chart1_FormatNumber(object sender, FormatNumberEventArgs e)
{
    if (e.ElementType == ChartElementType.AxisLabels &&
        e.ValueType == ChartValueType.Int64)
    {
        e.LocalizedValue = DateTime.FromFileTimeUtc((long)e.Value).ToShortDateString();
    }
}

このイベント ハンドラーは、グラフのいくつかの要素の変換中に呼び出されるため、目的の軸のみを確実に書式設定するために、カスタム書式を軸ラベルに渡すことができます。

this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MyAxisXCustomFormat";

次に、イベント ハンドラーにチェックを追加します。

void chart1_FormatNumber(object sender, FormatNumberEventArgs e)
{
    if (e.ElementType == ChartElementType.AxisLabels &&
        e.ValueType == ChartValueType.Int64 && 
        e.Format == "MyAxisXCustomFormat")
    {
        e.LocalizedValue = DateTime.FromFileTimeUtc((long)e.Value).ToShortDateString();
    }
}
于 2012-03-04T17:31:10.847 に答える
1

しようとしたか

 yourSeries.XValueType = ChartValueType.Time;
于 2011-02-17T12:27:38.293 に答える