VB2010 Chartでローソク足と折れ線を表示するには?

解決


 2012-09-06 09:56:19  No: 147779  IP: [192.*.*.*]

ローソク足チャートに折れ線も表示したいのですが上手く行きません。
1、---の部分を追加しますとローソク足が消えてしまいます。
2、Y軸の基点が0になってるのを400など株価に合わせて調整したい。
超初心者です。
よろしくお願いします。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 'データの取得
 Dim ds As New DataSet
 Dim dt As New DataTable
 Dim dtRow As DataRow

 '列の作成
 dt.Columns.Add("日付", Type.GetType("System.String"))
 dt.Columns.Add("高値", Type.GetType("System.Int32"))
 dt.Columns.Add("安値", Type.GetType("System.Int32"))
 dt.Columns.Add("始値", Type.GetType("System.Int32"))
 dt.Columns.Add("終値", Type.GetType("System.Int32"))
 dt.Columns.Add("指数", Type.GetType("System.Int32"))
 ds.Tables.Add(dt)

 'データの追加
 dtRow = ds.Tables(0).NewRow
 dtRow(0) = "2012/08/01" '日付
 dtRow(3) = "600"        '始値
 dtRow(1) = "700"        '高値
 dtRow(2) = "500"        '安値
 dtRow(4) = "550"        '終値
 dtRow(5) = "550"        '指数
 ds.Tables(0).Rows.Add(dtRow)

 dtRow = ds.Tables(0).NewRow
 dtRow(0) = "2012/08/2" '日付
 dtRow(3) = "850"        '始値
 dtRow(1) = "1100"       '高値
 dtRow(2) = "800"        '安値
 dtRow(4) = "800"        '終値
 dtRow(5) = "700"        '指数
 ds.Tables(0).Rows.Add(dtRow)

 dtRow = ds.Tables(0).NewRow
 dtRow(0) = "2012/08/3"  '日付
 dtRow(3) = "700"        '始値
 dtRow(1) = "800"        '高値
 dtRow(2) = "500"        '安値
 dtRow(4) = "750"        '終値
 dtRow(5) = "600"        '指数
 ds.Tables(0).Rows.Add(dtRow)

 'Chartコントロールにデータソースを設定
 Chart1.DataSource = ds

 '初期化    
 Chart1.Series.Clear()
 'Chartコントロールにタイトルを設定
 Chart1.Titles.Add("株価 ローソク足")
 'グラフの種類,系列,軸の設定
 For I As Integer = 1 To ds.Tables(0).Columns.Count - 1
     '列名の取得
     Dim columnName As String = ds.Tables(0).Columns(I).ColumnName
     '系列の設定
     Chart1.Series.Add(columnName)
     'グラフの種類(ローソク足チャート )
     Chart1.Series(columnName).ChartType = DataVisualization.Charting.SeriesChartType.Candlestick
     'X軸
     Chart1.Series(columnName).XValueMember = ds.Tables(0).Columns(0).ColumnName.ToString
     Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False
     Chart1.ChartAreas(0).AxisX.MinorGrid.Enabled = False
     'Y軸
     Chart1.Series(columnName).YValueMembers = "高値, 安値, 始値, 終値"
     '凡例の非表示
     Chart1.Series(columnName).IsVisibleInLegend = False

     '---------------------------
     'グラフの種類(折れ線)
     Chart1.Series(columnName).ChartType = DataVisualization.Charting.SeriesChartType.Line
     'Y軸
     Chart1.Series(columnName).YValueMembers = "指数"
     '---------------------------
 Next
 Chart1.DataBind()
End Sub

編集 削除
shu  2012-09-06 12:45:29  No: 147780  IP: [192.*.*.*]

'初期化  より下まるまる置き換え
以下のような感じでしょうか?

        '初期化    
        Chart1.Series.Clear()
        'Chartコントロールにタイトルを設定
        Chart1.Titles.Add("株価 ローソク足")

        Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False
        Chart1.ChartAreas(0).AxisX.MinorGrid.Enabled = False
        'グラフの種類,系列,軸の設定
        Dim rosoku = Chart1.Series.Add("ローソク")
        With rosoku
            .ChartType = DataVisualization.Charting.SeriesChartType.Candlestick
            .XValueMember = "日付"
            .YValueMembers = "高値, 安値, 始値, 終値"
            .IsVisibleInLegend = False
        End With

        Dim ore = Chart1.Series.Add("折れ線")
        With ore
            .ChartType = DataVisualization.Charting.SeriesChartType.Line
            .XValueMember = "日付"
            .YValueMembers = "指数"
            .IsVisibleInLegend = False
        End With
        Chart1.DataBind()

編集 削除
 2012-09-06 17:43:11  No: 147781  IP: [192.*.*.*]

shuさん、ありがとうございます。
まるまる置き換える必要があるとは、超初心者の私には思いもよらぬことでした。
有り難うございました。

あと、もしも可能でしたら…、
>2、Y軸の基点が0になってるのを400など株価に合わせて調整したい。
Y軸を0からではなく、データの最低値に合わせたいです。
このサンプルPですと、0の位置が400になれば嬉しいです。

編集 削除
shu  2012-09-06 18:00:51  No: 147782  IP: [192.*.*.*]

Chart1.ChartAreas(0).AxisY2.Minimum = 400
を追加して
ore.YAxisType = DataVisualization.Charting.AxisType.Secondary
とすれば良いです。
Minimum以外を調整したい場合はAxisY2の各プロパティをいじると
良いです。

編集 削除
 2012-09-06 23:04:09  No: 147783  IP: [192.*.*.*]

shuさん、ありがとうございます。

Chart1.ChartAreas(0).AxisY.Minimum = 400
のみの追加で希望通りになりました。

本当にありがとうございました。

編集 削除