Visual Basic Interface

Jumat, 13 November 2009

Graph GDI Data Plot VB 2008

Tips kali ini membuat Grafik Plotting Data Random. Tampilan visualnya seperti gambar di atas.

Ikuti langkah-langkah di bawah ini. ToolBox yang digunakan sebagai berikut:

Design Form dari ToolBox di atas seperti gambar di bawah ini:

Ketikkan source program di bawah ini dengan mengarahkan kursor pada design Form, Klik kanan lalu pilih View Code.

Source Program:


Public Class GdiGraphExample

REM Grafik akan langsung Loading
Private Sub GdiGraphExample_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

REM Nilai pada X-axis
REM Nilai dalam bentuk text as string
Dim rpmRange() As String = New String() {"0", "3", "6", "9", "12", "15", "18", "21", "24", "27"}

REM Nilai pada Y-Axis
REM Dictionary sebagai String dan Double-Array
Dim captureData As New Dictionary(Of String, Double())

REM Load data dari values untuk di plot codenya sebagai berikut
captureData.Add("6", New Double() {0.0, 0.2, 0.6, 1.4, 2.5, 3.9, 5.7, 7.7, 10.1, 12.8})
captureData.Add("9", New Double() {0.0, 0.3, 1.0, 2.3, 4.0, 6.3, 9.1, 12.4, 16.1, 20.4})
captureData.Add("12", New Double() {0.0, 0.3, 1.4, 3.1, 5.5, 8.7, 12.5, 17.0, 22.2, 28.1})
captureData.Add("15", New Double() {0.0, 0.4, 1.8, 4.0, 7.1, 11.0, 15.9, 21.6, 28.2, 35.7})
captureData.Add("18", New Double() {0.0, 0.5, 2.1, 4.8, 8.6, 13.4, 19.3, 26.2, 34.3, 43.4})
captureData.Add("21", New Double() {0.0, 0.6, 2.5, 5.7, 10.1, 15.8, 22.7, 30.9, 40.3, 51.0})
captureData.Add("24", New Double() {0.0, 0.7, 2.9, 6.5, 11.6, 18.1, 26.1, 35.5, 46.4, 58.7})

REM membuat array warna pada graph line
Dim lineColors() As Color = New Color() {Color.LightSkyBlue, Color.ForestGreen, Color.Red, _
Color.Navy, Color.Orange, Color.SlateBlue, Color.Orchid}

REM membuat brapa besar kanvas graph linenya
Dim graphImage As New Bitmap(400, 300, Imaging.PixelFormat.Format32bppRgb)

ClientSize = graphImage.Size
CenterToScreen()

RenderGraph(graphImage, rpmRange, captureData, Me.Font, 0.0, 60.0, 10.0, "HP-Electric", "RPM (x1000)", Color.LightGray, lineColors)

BackgroundImageLayout = ImageLayout.Center
BackgroundImage = graphImage

End Sub

Private Sub RenderGraph(ByVal destImage As Image, ByVal xAxisCaptions() As String, _
ByVal yAxisDatum As Dictionary(Of String, Double()), ByVal textFont As Font, _
ByVal yAxisMin As Double, ByVal yAxisMax As Double, ByVal yAxisIncrement As Double, _
ByVal yAxisTitle As String, ByVal xAxisTitle As String, _
ByVal chartColor As Color, ByVal lineColors() As Color)

Dim gfx As Graphics = Graphics.FromImage(destImage)

Dim canRenderGraph As Boolean = False

REM plot pada sumbu X- axis
If xAxisCaptions.Count > 0 Then
REM plot pada sumbu Y- axis
If yAxisDatum.Count > 0 Then

For Each datum() As Double In yAxisDatum.Values
If Not xAxisCaptions.Count = datum.Length Then
canRenderGraph = False
Exit For
End If
Next

canRenderGraph = True
End If
End If

If canRenderGraph Then

Dim blackBrush As New SolidBrush(Color.Black)
Dim blackPen As New Pen(Color.Black)

gfx.Clear(Color.White)

Dim yCaptionMax As SizeF = gfx.MeasureString(yAxisMax.ToString("N1"), textFont)

Dim yTitleSize As SizeF = gfx.MeasureString(yAxisTitle, textFont)

Dim yTickLength As Integer = 10


Dim xCaptionLast As SizeF = gfx.MeasureString(xAxisCaptions(xAxisCaptions.Length - 1), textFont)

Dim xTitleSize As SizeF = gfx.MeasureString(xAxisTitle, textFont)

Dim xTickLength As Integer = 8


Dim graphOffsetX As Integer = CInt(yTitleSize.Height + yCaptionMax.Width + yTickLength + 1)
Dim graphOffsetY As Integer = CInt(Math.Ceiling(yCaptionMax.Height / 2))
Dim graphOffsetHeight As Integer = CInt(xTitleSize.Height + xCaptionLast.Height + xTickLength + 1)
Dim graphOffsetWidth As Integer = CInt(Math.Ceiling(xCaptionLast.Width / 2))


gfx.TranslateTransform(0, destImage.Height)
gfx.RotateTransform(270)


Dim yTitleX As Integer = CInt(Math.Round((destImage.Height / 2) - (yTitleSize.Width / 2)))
gfx.DrawString(yAxisTitle, textFont, blackBrush, yTitleX, 0)


gfx.DrawLine(blackPen, graphOffsetHeight - 1, graphOffsetX - 1, destImage.Height - graphOffsetY, graphOffsetX - 1)

Dim yTickCount As Integer = CInt((yAxisMax - yAxisMin) / yAxisIncrement)
Dim yTickGap As Double = Math.Ceiling((destImage.Height - graphOffsetY - graphOffsetHeight) / yTickCount)

For i As Integer = 0 To yTickCount
Dim ix As Integer = CInt((yTickGap * i) + graphOffsetHeight - 1)
gfx.DrawLine(blackPen, ix, CInt(graphOffsetX - 1 - yAxisIncrement), ix, graphOffsetX - 1)
Next


gfx.ResetTransform()


Dim cnt As Integer = 0
For i As Double = yAxisMax To 0.0 Step (yAxisIncrement * -1)
gfx.DrawString(i.ToString("N1"), textFont, blackBrush, yTitleSize.Height, CSng(cnt * yTickGap))
cnt += 1
Next


Dim xTitleX As Integer = CInt(Math.Round((destImage.Width / 2) - (xTitleSize.Width / 2)))
gfx.DrawString(xAxisTitle, textFont, blackBrush, xTitleX, CSng(destImage.Height - xTitleSize.Height))


Dim xAxisY As Integer = CInt(destImage.Height - graphOffsetHeight + 1)
Dim xAxisWidth As Integer = CInt(destImage.Width - graphOffsetX - (graphOffsetWidth * 2))
Dim yAxisHeight As Integer = CInt(destImage.Height - graphOffsetY - graphOffsetHeight - 1)


gfx.DrawLine(blackPen, graphOffsetX, xAxisY, graphOffsetX + xAxisWidth + CInt(graphOffsetWidth / 2), xAxisY)

Dim xTickGap As Double = Math.Ceiling(xAxisWidth / (xAxisCaptions.Length - 1))

For i As Double = 0 To xAxisCaptions.Count - 1
Dim ix As Integer = CInt(Math.Floor(xTickGap * i) + graphOffsetX - 1)
gfx.DrawLine(blackPen, ix, xAxisY, ix, xAxisY + xTickLength)
Next


For i As Integer = 0 To xAxisCaptions.Count - 1
Dim capStr As String = xAxisCaptions(i)
Dim capSize As SizeF = gfx.MeasureString(capStr, textFont)
gfx.DrawString(capStr, textFont, blackBrush, CSng((graphOffsetX - (capSize.Width / 2)) + (i * xTickGap)), xAxisY + xTickLength)
Next


Dim graphBrush As New SolidBrush(chartColor)
gfx.FillRectangle(graphBrush, New Rectangle(graphOffsetX, graphOffsetY - 1, CInt(xAxisWidth + (graphOffsetWidth / 2)), yAxisHeight + 3))
graphBrush.Dispose()


gfx.TranslateTransform(graphOffsetX, destImage.Height - graphOffsetHeight)
cnt = 0
For Each datum() As Double In yAxisDatum.Values
Dim dstPoints As New List(Of PointF)
For i As Integer = 0 To datum.Length - 1

dstPoints.Add(New PointF(CSng(i * xTickGap), CSng((datum(i) / yAxisMax) * yAxisHeight * -1)))
Next

Dim linePen As New Pen(lineColors(cnt), 2)
cnt += 1

Dim pth As New System.Drawing.Drawing2D.GraphicsPath
pth.AddLines(dstPoints.ToArray)
gfx.DrawPath(linePen, pth)
linePen.Dispose()
Next


gfx.ResetTransform()
blackBrush.Dispose()
blackPen.Dispose()
Else
Dim errMsg As String = "Grafik tidak dapat menampilkan data."
Dim errFont As New Font("Verdana", 14, FontStyle.Bold)
Dim msgSize As SizeF = gfx.MeasureString(errMsg, errFont, destImage.Width)
Dim msgX As Single = CSng(Math.Round((destImage.Width / 2) - (msgSize.Width / 2)))
Dim msgY As Single = CSng(Math.Round((destImage.Height / 2) - (msgSize.Height / 2)))

gfx.DrawString(errMsg, errFont, Brushes.Red, New RectangleF(msgX, msgY, msgSize.Width, msgSize.Height))
End If

gfx.Dispose()
End Sub

End Class


Setelah mengetikkan listing dari source program diatas tekan F5, maka hasil tampilan visualnya paling atas.

Artikel Yang berkaitan tentang Dynamic Line Klik di bawah ini:
Grafik 2D PictureBox V Basic 2008

Selamat mencoba Guys! Nantikan Tips Aplikasi Cantik Lainnya by Verynandus Hutabalian

1 komentar:

Anonim mengatakan...

Artikel yang menarik dan sangat membantu. Tapi ditempat saya kok muncul error seperti dibawah ini ya ?

Nilai : ByVal xAxisCaptions() As String

Error 'Count' is not a member of 'System.Array'

Bisa dijelaskan kembali

Dunia Science Terkini

  1. Untaian Genom Dalam 3D
  2. Robot Pelompat
  3. Burung Pertama Bukan Burung
  4. Cincin Terbesar Planet Saturnus
  5. Miliarder Kanada Kembali Dari Luar Angkas
  6. Asteroid Terbesar Kedua di Bimasakti
  7. 32 Planet Terbaru
  8. Planet Terbaru Mengandung Molekul Organik
  9. Tuak Sebagai Energi Alternatif
10. Cumi-Cumi Raksasa Teluk Meksiko
11. Fosil Gajah Purba Teridentifikasi
12. "Ardi" Nenek Moyang Pertama Manusia
13. Konserfasi Gading Gajah Purba Sembarangan
14. Jejak Dinosaurus Terbesar
15. Apakah Manusia Berevolusi
16. Fondasi Kuno 1300 Tahun Lalu Ditemukan
17. Fosil Telur Dinosaurus India
18. Pecahan Keramik Abad XII
19. Penemuan Terbaru Putra Indonesia
20. Udang Tanpa Mata
21. Menguak Misteri Si Raja Laut
22. Goa Terbesar Di Dunia
23. Nobel Fisika Diraih 3 Ilmuan AS
24. Tiga Peneliti Ribosom Raih Nobel
25. Kemungkinan Asteroid Menabrak Bumi
26. 24 Pulau Indonesia Hilang
27. 50 Perusahaan Kategori Hitam
28. Anak SMP Pencipta Antivirus
29. Apakah Manusia Berevolusi
30. Ida, Potongan Jejak Evolusi Primata
31. Nasa Sukses Uju Coba Protipe Ares I-X
32. Monster Laut Inggris Lebih Garang dari T-Rex
33. Ledakan Bone Adalah Asteroid Jatuh
34. Ledakan Meteor Di Bone Lampui Bom Atom
35. Dinosaurus Lapis Baja Ditemukan
36. Retakan Besar di Afrika Bakal Menjadi Samudera Baru
37. Batu Megalitikum Usia Ribuan Tahun
38. Jejak Kaki Dinosaurus Di Selandia Baru
39. Kudus Lacak Tengkorak Homo Erectus
40. Fosil Spesies Baru Dinosaurus Jurassic
41. Di Indonesia Peningkatan Kasus AIDS 8 Kali Lipat
42. 270 Ribu Penduduk Tertular HIV/AIDS
43. Awas, Operasi Permak Miss V tak Aman
44. Manfaat Rokok Hanyalah Sugesti dan Mitos
45. Teknik Pembenaman Karbon Dikaji
46. 2012, Matahari dan Bosscha
47. Bunga Bangkai Raksasa Mekar di Mekarsari
48. Fosil Kepala Gajah Purba Seberat 1 Kuintal
49. Menelusuri Jejak Lava Gunung Pra-Sunda
50. Legenda "Pengisap Darah" Chupacabra
51. Adanya Harapan Kanker Bisa Diobati
52. Sedot Lemak Menggunakan Gelombang Radio
53. NASA Persiapkan Atlantis untuk Misi ke ISS
54. 25 Galon Air Muncrat dari Permukaan Bulan
55. Peluncuran Pesawat Ulang Alik Atlantis
56. Sebuah Sumur Kerajaan Mataram Kuno
57. Seekor Anak Ikan Purba Terekam Kamera
58. Buaya Purba Bergigi Babi Hutan, Tikus & Moncong Lebar
59. Kemungkinan Penyakit Menjangkit di Bulan Desember
60. Kafan Yesus, Tubuh Dalam Kafan Melayang
61. Misteri Berkas Tulisan Kain Kafan Yesus
62. Jemari dan Gigi dari Jenazah Galileo Galilei
63. Ribuan Makhluk Aneh Di Dasar Samudera
64. Akademisi Memperingati 150 Tahun Karya Darwin
65. Peningkatan Tertinggi Gas Rumah Kaca 2008
66. Pemanasan Global Lebih Buruk Dari Perkiraan
67. Ternyata, Kulit Bisa Mendengar
68. Makin Berlemak, Makin Sulit Berhenti Makan
69. Atlantis Menunju Bumi
70. Otak Besar, Tidak Berarti Lebih Pintar
71. 10 Ramalan Kiamat Terbukti Meleset
72. Mesin Big Bang Selidiki Misteri Alam Semesta
73. Ternyata Alien Sudah Membaur Di Bumi
74. Sejarah di Balik Legenda Vampir
75. Pesawat Ulang Alik Atlatis Mendarat Mulus
76. Perjalanan Panjang HIV/AIDS
77. Wah... Setiap Hari Ada 7.400 Kasus Baru HIV!
78. Tim Vertebrata Lanjutkan Penelitian Gajah Purba
79. Wah... Setiap Hari Ada 7.400 Kasus Baru HIV!
80. Kesepian Menular Seperti Virus
81. Militer Inggris Tutup Kuping soal UFO
82. Objek Misterius Dekat Bintang Mirip Matahari
83. Virgin Galactic Kenalkan SpaceShipTwo
84. Tetap Internetan Saat Penerbangan
85. Jepang Luncurkan Satelit Pengintai Kelima
86. Robot Kerang Bisa Ledakkan Tambang di Bawah Air
87. Mahasiswa Matematika Juarai Kompetisi "Hacker"
88. UFO di Sayap Pesawat Lion Air
89. Lima Benda Purbakala Ditemukan di Desa Tanjungsari
90. Afrika Asal Usul Suku Bangsa Asia
91. Kembaranku Robot
92. Pertikaian Microsoft Vs Uni Eropa Berakhir
93. Kopi Tunda Alzheimer Parah
94. Gen Penyebab Alzheimer Berhasil Ditemukan
95. Ada Kaitan Alzheimer dengan Hormon Nafsu Makan
96. Ditemukan Planet Serupa Bumi yang Memiliki Air