- PR -

MSChartコントロールで折れ線チャートを描かせたい(C#)

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2004-04-29 18:03
VisualStudio2003に同梱されているMSChart20Libが使えないか試みています。
けれどもC#からどう使えば良いか分かりません。アドバイス願います。

課題
Form(Windows)上に簡単な折れ線グラフを描きたい
(X軸=時刻、Y軸=計測値←intの配列(0〜2048)、毎秒60件の計測値が発生する)

質問
(1) MSDNではVBによる描画例しかありませんが、C#から、しかも折れ線を
描画する方法を知りたい。
(2) 応用としてチャートを1秒周期で逐次更新させたい。
X軸に現在時刻からさかのぼって10秒間の計測値を表示する。
つまりX軸が時刻なので1秒周期で横スクロールするように見える。
必要な部分だけ再更新する方法もアドバイスいただければ尚ありがたい。


以前この掲示板で「折れ線グラフ(C#)2004/4/17」で質問しました。
その時は
(1)GDI+で描画する
(2)フリーソフトを使う
(3)市販パッケージを使う
というアドバイスを受けました。
市販のパッケージでは
GrapeCityのNetAdvantage2004やTrueWinChartに魅力を感じています。
その後調べるうちにVisualStudioにMSChartと呼ばれるコントロールが同梱
されていることに気がつきました。レガシーなのが気になりますが、
とりあえず追加投資がいらないということで試そうと思いました。

以下MSDNの検索例

データをグラフィカルに表示するグラフです。

構文
MSChart

解説
グラフ コントロールは、次の機能をサポートします。

真の 3 次元表現。
すべての主要なグラフの種類に対するサポート。
ランダムなデータおよびデータ配列によるデータ グリッドの入力。
グラフ コントロールは、データ グリッド (DataGrid オブジェクト) と関連しています。このデータ グリッドは、グラフ化されるデータを保持するテーブルのことです。データ グリッドには、グラフ上の系列およびカテゴリの識別に使われるラベルも含めることができます。グラフ アプリケーションをデザインする人は、データの挿入またはスプレッドシートや配列からデータの移植により、データ グリッドを情報で埋めます。


'In this example, the sales for two companies are shown for four months.
'Create the data array and bind it to the ChartData property.
Dim Sales(,) As Object = New Object(, ) _
{{"Company", "Company A", "Company B"}, _
{"June", 20, 10}, _
{"July", 10, 5}, _
{"August", 30, 15}, _
{"September", 14, 7}}
chtSales.ChartData = Sales

'Add a title and legend.
With Me.chtSales
.Title.Text = "Sales"
.Legend.Location.LocationType = _
MSChart20Lib.VtChLocationType.VtChLocationTypeBottom
.Legend.Location.Visible = True
End With

'Add titles to the axes.
With Me.chtSales.Plot
.Axis(MSChart20Lib.VtChAxisId.VtChAxisIdX).AxisTitle.Text = "Year"
.Axis(MSChart20Lib.VtChAxisId.VtChAxisIdY).AxisTitle.Text = "Millions of $"
End With

'Set custom colors for the bars.
With Me.chtSales.Plot
'Yellow for Company A
' -1 selects all the datapoints.
.SeriesCollection(1).DataPoints(-1).Brush.FillColor.Set(250, 250, 0)
'Purple for Company B
.SeriesCollection(2).DataPoints(-1).Brush.FillColor.Set(200, 50, 200)
End With
1

スキルアップ/キャリアアップ(JOB@IT)