Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
散布図のグラフ データ同士を線で接続する
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30287#CommentId83058
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
vb素人
 (学生)
投稿日時
2017/9/15 08:52:21
シリアル通信から受信したデータを散布図に表示しています。
(Excelの散布図のようなグラフを描きたいと考えていて、Pointを選択しています。)
横軸が、Timerでカウントする時間
縦軸は、シリアル通信から得られるデータを考えています。
今の状況としては、
散布図のように点(マーカー)でプロットできている状況です。
散布図のように点(マーカー)と点(マーカー)を線で接続することができないかと思っています。
↓の投稿で魔界の仮面弁士さまに教えていただいて試してみているのですが、
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30285
↓のプログラムの内容で実行すると、凡例の部分は、ラインで表示されているのですが、
グラフ上には何も表示がされません。(Point表示のseries2は表示されます。)
魔界の仮面弁士さまのコードと違う点は、
データが固定値なのか、シリアル通信で受信した値(受信するたびに変化)するかの違いだと思っています。
どうして何も表示されないのかがよく分かりません。
原因について教えていただけないでしょうか。
①
Private Delegate Sub Delegate_RcvXDataToTextBox(xdec As String)
Private Delegate Sub Delegate_RcvYDataToTextBox(ydec As String)
②
Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
'細かい所は省略します
Dim datax As Byte() = {bin(2), bin(1)}
Dim x As UShort = BitConverter.ToUInt16(datax, 0) '符号なし2 バイト整数に変換
Dim datay As Byte() = {bin(4), bin(3)}
Dim y As UShort = BitConverter.ToUInt16(datay, 0) '符号なし2 バイト整数に変換
Received(x, y)
End Sub
③
Private Sub Received(x As UShort, y As UShort)
If InvokeRequired Then
Invoke(New Action(Of UShort, UShort)(AddressOf Received), x, y)
Else
xdata = 1023 - x
ydata = 1023 - y
'☆
s.BorderWidth = 3
s.BorderDashStyle = ChartDashStyle.Dot
s.ChartType = SeriesChartType.Line
t.ChartType = SeriesChartType.Point
s.Points.AddXY(time, (1023 - x))
t.Points.AddXY(time, (1023 - y))
End If
End Sub
④
'データ数
Dim CountData As Integer
'測定間隔
Dim time As Double = 0.0
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
CountData = CInt(TextBox1.Text)
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
CountData -= 1
timeLabel.Text = "残り" & CountData & "個"
time+=0.1
'Saveコード
Dim sw As System.IO.StreamWriter
sw = New System.IO.StreamWriter("accel.csv", True,
System.Text.Encoding.GetEncoding(932))
sw.WriteLine(xdata & "," & ydata & "," & time)
sw.Close()
If CountData = 0 Then
Timer1.Enabled = False
MessageBox.Show("測定終了")
End If
End Sub