Hola.
Hay dos cosas a tener en cuenta.
Si mal no recuerdo, MsComm1.input es una variable que debe ser volcada en otra antes de poder utilizarla, por lo tanto estas obligado a volcarla en otro lado primero. A esto lo haces.
Pero surge el siguiente problema:
TxtRecibir.Text = TxtRecibir.Text & StrConv(MSComm1.Input, vbUnicode) & vbCrLf
Aqui estas juntando el dato que obtienes con muchas cosas mas. Hay cosas que no son valores numericos. Como por ejemplo el vbCrLf que es lo mismo que hacer un ENTER (Chr(10) & Chr(13)).
Obviamente al no tener valores numericos, vas a tener error.
Yo lo plantearia asi:
Private Sub MSComm1_OnComm()
Dim Y As String
Dim X As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
Y = MSComm1.Input
TxtRecibir.Text = TxtRecibir.Text & StrConv(Y, vbUnicode) & vbCrLf
'TxtRecibir.SelStart = Len(TxtRecibir) '¿? ¡innecesario!
X = 100
if isnumeric(Y) then grafica.Circle (csng(Y) * 0.2, X), 0.5
End Select
End Sub
Probalo y me contas que tal te fue. Tene en cuenta que asi tal como tenes el codigo, vas a obtener circulos siempre con el mismo valor X, lo unico que puede variar es el eje Y.
Recuerda tambien que el componente picturebox contiene el eje Y invertido. Asi que los datos te saldran espejados.
Para que salgan correctamente cambia:
if isnumeric(Y) then grafica.Circle (csng(Y) * 0.2, X), 0.5
por esto:
if isnumeric(Y) then grafica.Circle (grafica.height - csng(Y) * 0.2, X), 0.5
Saludos.