2016/02/16(Tue) 20:51:33 編集(投稿者)
VBとは書いてあったが、VB 2010 Expressだったのかorz
最近のExpress Editionって、全言語使えるんじゃなかったっけ?
2010の頃は分かれていたと思うけど。
まぁ、あれだ。
No78703 でshuさんが書かれているように、「Seriesを増やせば良いです」。
それに対して、なぜ、No78704 で
「同じ時系列のデータを複数のChartに別々に表示してるのを
1枚のChartにまとめて
上下に積み重ねるように表示したい」
と返しているのか。
この返答に至る原因を予想してみた。
1.SeriesTypeを設定していないので、すべて同じタイプのグラフになっているから
2.Y値が同じような値なので、「上下に積み重ねるように表示」という感じではないから
3.「ローソク足チャート」に必要なデータがわからないから
4.ChartA、ChartB内でSeries.Clearしているため、他のSeriesが消えてしまうから
本命4、対抗2、大穴3で。
とりあえず、これ↓で良いはず。
最後の行のコメントを外して、「AxisY2.Maximum」に設定する値を大きくすると、
第2軸の最大値が大きくなり、棒グラフが下がります。
# ムズいよ、VB
Visual Studio 2010 VB Project で作成。
フォームに Chart を置き、Dock を Full に設定。
Public Class Form1
Private dataTable As DataTable
''' <summary>
''' (3) データを作る
''' </summary>
Private Sub CreateData()
' データの作り方はSamples Environments for Microsoft Chart Controlsから
Me.dataTable = New DataTable("データ")
Me.dataTable.Columns.Add("日付", GetType(Date))
Me.dataTable.Columns.Add("最高値", GetType(Double))
Me.dataTable.Columns.Add("最安値", GetType(Double))
Me.dataTable.Columns.Add("始値", GetType(Double))
Me.dataTable.Columns.Add("終値", GetType(Double))
Me.dataTable.Columns.Add("volume", GetType(Double))
' データの初期値を作成する
Dim d = Date.Today.Subtract(New TimeSpan(31, 0, 0, 0))
Dim rnd = New Random()
Dim high = rnd.NextDouble * 40
Dim close = high - rnd.NextDouble
Dim low = close - rnd.NextDouble
Dim open = (high - low) * rnd.NextDouble + low
Dim volume = 100 + 15 * rnd.NextDouble
' データ作成
While (d < Date.Today())
' データを設定する
Me.dataTable.Rows.Add(d, high, low, open, close, volume)
' 次に設定するデータを用意する
d = d.AddDays(1)
high = open + rnd.NextDouble
close = high - rnd.NextDouble
low = close - rnd.NextDouble
open = (high - low) * rnd.NextDouble + low
volume = volume + 10 * rnd.NextDouble - 5
End While
End Sub
''' <summary>
''' チャートを作る
''' </summary>
Private Sub CreateChart()
' ローソク足チャート
Dim price = Me.Chart1.Series.Add("Price")
price.XValueMember = "日付"
price.YValueMembers = "最高値,最安値,始値,終値"
price.ChartType = DataVisualization.Charting.SeriesChartType.Candlestick ' (1) ローソク足
price.YAxisType = DataVisualization.Charting.AxisType.Primary ' (2) 参照する軸を分ける
price.XValueType = DataVisualization.Charting.ChartValueType.Date
price.YValueType = DataVisualization.Charting.ChartValueType.Double
price.ChartArea = Me.Chart1.ChartAreas(0).Name ' 同じ描画領域に描く
price.Enabled = True
' 棒グラフ
Dim volume = Me.Chart1.Series.Add("Volume")
volume.XValueMember = "日付"
volume.YValueMembers = "volume"
volume.ChartType = DataVisualization.Charting.SeriesChartType.Column ' (1) 縦棒
volume.YAxisType = DataVisualization.Charting.AxisType.Secondary ' (2) 参照する軸を分ける
volume.XValueType = DataVisualization.Charting.ChartValueType.Date
volume.YValueType = DataVisualization.Charting.ChartValueType.Double
volume.ChartArea = Me.Chart1.ChartAreas(0).Name ' 同じ描画領域に描く
volume.Enabled = True
' その他、横線の設定なども適宜行う。
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Me.Chart1.Series.Clear() ' (4) Series のクリアは最初だけ
Me.CreateData()
Me.CreateChart()
Me.Chart1.DataSource = Me.dataTable
'Me.Chart1.ChartAreas(0).AxisY2.Maximum = 400 ' (2) 有効にすると、棒グラフが下がる
End Sub
End Class