タイトル | : Chartオブジェクト 打点でのX軸の扱いに関して |
記事No | : 11647 |
投稿日 | : 2016/04/07(Thu) 18:40 |
投稿者 | : 食う寝る走る |
開発環境 OS:Windows7(32bit)プロフェッショナル IDE:VS2015 コミュニティ(VB.net)
前回はNo.11641で Chartコントロールで、カーソルの表示に関して質問させて頂きました。 今回は、同じような考えで、既にフォームのLOADイベントで表示してあるチャート上の指定ポイント(X-Y)に打点をしたいのですが、 何故か X軸の値にどのような値を入れてもX=0に打点され、X軸目盛が消えてしまいます。
サンプルコードでは、SIN(Y1軸)、COS(Y2軸)波を書いてあります。
(質問1)X=5、Y=0に打点する場合、Y軸は反映されますがX軸は0の所に打点されてしまう?
(質問2)打点後、X軸の軸目盛が消えてしまう?
以上となりますが、よろしくお願いいたします。
下記コードは、フォーム上に Chart×1 ボタン×1 テキストボックス×2 ラベル×2 貼り付けの上、実行しボタン1のクリックでテキストボックス1(X軸),2(Y軸)の値をチャートにに打点いたします。
'------------------------------------------------------------------------------------------------ Imports System.Windows.Forms.DataVisualization.Charting Public Class Form1
Dim series1 As New Series() 'SIN Dim series2 As New Series() 'COS Dim series3 As New Series() '任意ポイント プロット Dim series4 As New Series() '任意ポイント プロット Dim xval() As Double 'X軸格納 Dim yval() As Double 'Y1軸格納 Dim yval2() As Double 'Y2軸格納
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.Text = "X" Label2.Text = "Y" TextBox1.Text = 5 TextBox2.Text = 0
'チャートコントロールオブジェクト Chart1.Series.Clear()
'~データのシリーズ追記 With Chart1 .Series.Add(series1) 'SIN .Series.Add(series2) 'COS .Series.Add(series3) '任意ポイント プロット .Series.Add(series4) '任意ポイント プロット End With
'内部データの初期化 series1.Points.Clear() series2.Points.Clear() series3.Points.Clear() series4.Points.Clear()
' グラフの種類は散布図(Point Chart) series1.ChartType = SeriesChartType.Point
With Chart1.ChartAreas(0).AxisX '10点毎に補助線を表示 .MinorGrid.Enabled = True 'True に設定しないと表示しない .Title = "X" .MinorGrid.Interval = 100 .MinorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.Dash .LabelStyle.Format = "0.0" End With
With Chart1.ChartAreas(0).AxisY 'Y軸の設定 .TitleForeColor = Color.Red .Title = "sin(X)" 'タイトルのテキストを設定 .LineColor = Color.Red .MajorGrid.LineColor = Color.Red .LabelStyle.ForeColor = Color.Red .MajorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.Solid .LabelStyle.Format = "0.0" .Enabled = AxisEnabled.True '第1軸を有効化 End With
'
With Chart1.ChartAreas(0).AxisY2 'Y2軸の設定 .TitleForeColor = Color.Blue .Title = "cos(X)" 'タイトルのテキストを設定 .LineColor = Color.Blue .MajorGrid.LineColor = Color.Blue .LabelStyle.ForeColor = Color.Blue .MajorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.Solid .LabelStyle.Format = "0.0" .Enabled = AxisEnabled.True '第二軸表示を有効化
End With
'凡例 With Chart1 .Series(0).LegendText = "cos(X)" .Series(1).LegendText = "sin(X)" .Series(2).LegendText = "プロット" .Series(3).LegendText = "プロット" End With
' グラフの種類は散布図(sin Chart) With series1 .ChartType = SeriesChartType.Point .MarkerSize = 5 .MarkerStyle = MarkerStyle.Circle .MarkerBorderColor = Color.Black .MarkerBorderWidth = 0.1 .MarkerColor = Color.Blue .XAxisType = AxisType.Primary .YAxisType = AxisType.Secondary .Enabled = True End With
' グラフの種類は散布図(cos Chart) With series2 .ChartType = SeriesChartType.Point .MarkerSize = 5 .MarkerStyle = MarkerStyle.Circle .MarkerBorderColor = Color.Black .MarkerBorderWidth = 0.1 .MarkerColor = Color.Red .XAxisType = AxisType.Primary .YAxisType = AxisType.Primary .Enabled = True End With
' グラフの種類は散布図(任意Point Chart) With series3 .ChartType = SeriesChartType.Point .MarkerSize = 20 .MarkerStyle = MarkerStyle.Circle .MarkerBorderColor = Color.Black .MarkerBorderWidth = 0.1 .MarkerColor = Color.Green .XAxisType = AxisType.Primary .YAxisType = AxisType.Primary .Enabled = True End With
' グラフの種類は散布図(任意Point Chart) With series4 .ChartType = SeriesChartType.Point .MarkerSize = 20 .MarkerStyle = MarkerStyle.Circle .MarkerBorderColor = Color.Black .MarkerBorderWidth = 0.1 .MarkerColor = Color.Aquamarine .XAxisType = AxisType.Primary .YAxisType = AxisType.Secondary .Enabled = True End With
Dim k As Integer = 0 '格納配列のアドレス用カウンター For i = 0 To 10 Step 0.01 ReDim Preserve xval(k) '配列の要素数の変更 xval(k) = i 'X軸値格納 ReDim Preserve yval(k) '配列の要素数の変更 yval(k) = Math.Sin(xval(k)) 'Y軸値格納 ReDim Preserve yval2(k) '配列の要素数の変更 yval2(k) = Math.Cos(xval(k)) 'Y2軸値格納
series1.Points.AddXY(xval(k), yval(k)) 'SIN波プロット series2.Points.AddXY(xval(k), yval2(k)) 'COS波プロット
k = k + 1 Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
series3.Points.Clear() '内部データの初期化 series3.Points.AddXY(TextBox1.Text, TextBox2.Text) '打点
series4.Points.Clear() '内部データの初期化 series4.Points.AddXY(TextBox1.Text, TextBox2.Text) '打点
End Sub End Class
|