- PR -

ZedGraphのNull値をプロットさせない方法

1
投稿者投稿内容
kosmas
会議室デビュー日: 2008/09/19
投稿数: 8
投稿日時: 2008-09-19 17:28
はじめまして
VB2005を活用し業務アプリケーションを開発しているものです。
主に製造技術のデータの処理でデータベースやグラフを使っています。

グラフに関してですが、今までMSChartを利用していましたが、
配布先にVB6をインストールする必要がある為面倒でした。
最近、「ZedGraph」というものを知って、使い始めているのですが、
分からないところがありまして、どなたかご存知でしたら教えて頂けると助かります。

グラフにプロットするデータは、DataSetでDataGridViewに一度表示します。
DataDridViewから必要な列のデータをListに入れてZedGraphへ渡しますが、
DataGridViewに値が入っていない場合もあります。
データが入っていない場合に、その部分だけプロットされないようにするには、
どのようにするのでしょうか?
以下の方法ではデータが無い場合に、ゼロをプロットしてしまいます。

▼利用しているコードの一部
'グラフプロットメソッド(グラフコントロール名,カラムNo,ラインカラー,タイトル名,Y軸名)
Private Sub GraphProts(ByVal zg As ZedGraphControl, ByVal ColumnNo As Integer, ByVal LineColor As Color, ByVal TitleName As String, ByVal SubTitleName As String, ByVal YName As String, ByVal DataGridViews As DataGridView)

'レコード数を取得
Dim Cnt As Integer = DataGridViews.BindingContext(DataGridViews.DataSource, DataGridViews.DataMember).Count
Dim i As Integer
Dim DataList(Cnt - 1) As Double
Dim LabelList(Cnt - 1) As String
For i = 0 To Cnt - 1
LabelList(i) = DataGridViews(0, i).Value
Try
If DataGridViews(ColumnNo, i).Value.ToString > "" Then
DataList(i) = DataGridViews(ColumnNo, i).Value
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next

' グラフ/X軸、Y軸のタイトル設定
Dim myPane As GraphPane = zg.GraphPane
myPane.Title.Text = TitleName
myPane.YAxis.Title.Text = YName

'Xラベル設定
myPane.XAxis.Scale.TextLabels = LabelList
myPane.XAxis.Type = AxisType.Text

'グラフライン表示設定
Dim myCurve As LineItem

'グラフライン表示(ライン色、シンボル形状設定含む)
myCurve = myPane.AddCurve(SubTitleName, Nothing, DataList, LineColor, SymbolType.Diamond)

'グラフ情報を再計算
zg.AxisChange()

'グラフ表示反映
zg.Invalidate()

End Sub

'プロットさせる側のコード
ZedGraphControl1.GraphPane.CurveList.Clear()
ZedGraphControl1.GraphPane.GraphObjList.Clear()
'カラムNoを変えることで同じグラフの別のラインがプロットできる
GraphProts(ZedGraphControl1, 2, Color.Red, "タイトル", "凡例1", "単位", DataGridView3)
GraphProts(ZedGraphControl1, 3, Color.Blue, "タイトル", "凡例2", "単位", DataGridView3)

以上、宜しくお願いします。
sou
ベテラン
会議室デビュー日: 2002/09/25
投稿数: 56
投稿日時: 2008-09-19 22:20
線を引かないシンボルだけのLineItemと、シンボルがない線だけのLineItemの
2つのLineItemを重ねて表示する。

シンボルだけのLineItemは、データが入っているところだけプロットする。
線だけのLineItemは、データが入っていないところも前後のデータから計算してプロットする。
kosmas
会議室デビュー日: 2008/09/19
投稿数: 8
投稿日時: 2008-09-25 12:50
souさん
回答ありがとうございます
返信が遅くなってしまいすみませんでした。

返事としては、データが無いX軸には、Lineとシンボルを表示させたくないのです。
ですから、中間値のプロットはしたくありません。

他に方法は無いのでしょうか?
今回Listを使用しているのですが、配列に変えてチャレンジしてみます。

もし、他で分かる方が居ましたら、宜しくお願いします。
kosmas
会議室デビュー日: 2008/09/19
投稿数: 8
投稿日時: 2008-09-25 14:54
kosmas です
自己解決しました。

If DataGridViews(ColumnNo, i).Value.ToString > "" Then
DataList(i) = DataGridViews(ColumnNo, i).Value
ElseIf DataGridViews(ColumnNo, i).Value.ToString = "" Then
DataList(i) = "NaN (非数値)"
End If

上のように、Listへデータが無い場合に、"NaN(非数値)"を渡すことで、
表示されなくなりました。

以上
1

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