نیاز به کمک در visual basic 2010

kian.. .

Member
سلام
من میخوام یه سری داده تو دو تا ارایه یک سطری رو بر حسب هم رسم کنم به صورت نمودار
مثلا فرض کنید یکی از آرایه ها X و دیگری Y باشه و می خوام نمودار X-Y رسم کنم
همچنین می خوام جوری باشه که بتونم روی هر محور یک تگ بنویسم!
نمودار اگه پیوسته باشه بهتره اگه نقطه ای شد هم مهم نیست!


ممنون میشم از کمکتون.. .:rose:
 

the_king

مدیرکل انجمن
سلام
من میخوام یه سری داده تو دو تا ارایه یک سطری رو بر حسب هم رسم کنم به صورت نمودار
مثلا فرض کنید یکی از آرایه ها X و دیگری Y باشه و می خوام نمودار X-Y رسم کنم
همچنین می خوام جوری باشه که بتونم روی هر محور یک تگ بنویسم!
نمودار اگه پیوسته باشه بهتره اگه نقطه ای شد هم مهم نیست!


ممنون میشم از کمکتون.. .:rose:

attachment.php


DrawDiagram.zip
 

پیوست ها

  • DrawDiagram.zip
    61.6 کیلوبایت · بازدیدها: 16
  • Preview.gif
    Preview.gif
    11.5 کیلوبایت · بازدیدها: 28

kian.. .

Member

خیلی ممنون
فقط این یه مشکل داره اونم اینکه داده ها تو یه جای دیگه از برنامه بدست میاد البته این مشکل اصلی نیست
مشکل اینجاست که من گفتم میخوام که روی مثلا محور X بنویسم زمان و روی محور Y بنویسم غلظت!
و یه چیز دیگه این که محدوده اعداد در دفعات مختلف محاسبات مختلف میباشد! یعنی برای هر سری داده با توجه به بزرگترین داده باید تصمیم بگیره!
:rose:
 
آخرین ویرایش:

the_king

مدیرکل انجمن
خیلی ممنون
فقط این یه مشکل داره اونم اینکه داده ها تو یه جای دیگه از برنامه بدست میاد البته این مشکل اصلی نیست
مشکل اینجاست که من گفتم میخوام که روی مثلا محور X بنویسم زمان و روی محور Y بنویسم غلظت!
اینکه مشکل نیست، هر جایی که از این PictureBox یک موقعیت X و Y داره، چه کنار محور ها و چه هر جای دیگری،
شما کافیه موقعیت X و Y مناسب رو برای نمایش متن بدست بیاورید و به جدول پایینی اضافه کنید، البته این یک مثاله که
از جدول استفاده کرده، الزامی نیست که حتما یک جدول نشون کاربر داده بشه. خونه های اون جدول ها قابل ویرایشه.

و یه چیز دیگه این که محدوده اعداد در دفعات مختلف محاسبات مختلف میباشد! یعنی برای هر سری داده با توجه به بزرگترین داده باید تصمیم بگیره!
:rose:
محدوده اعداد رو شما تعیین می کنید، ارتباطی با رسم نمودار نداره، رسم نمودار یک روال کلی داره که یکسری
X و Y متناظر دریافت کنه و نمایش بده. اینکه چه X و Y هایی بهش ارسال کنید دست خودتونه. روال نمایش که
لازم نیست عوض بشه، مقادیر ورودی عوض میشه. برای بزرگتر و کوچکتر کردن بازه نمایشی، اصولا همه مقادیر X
و Y رو در یک عدد فاکتور (مثلا 0.05) ضرب می کنند تا فرضا نمایش نقاطی مثل (15745, 4819) میسر باشه.
 

kian.. .

Member
من می خوام این برنامه رو تو یک برنامه دیگه استفاده کنم
و محل رسم نمودار مشخص نیست دقیق حدودا در x=300 و y=1000 باید صفر نمودار قرار بگیره هر چی خودم تلاش می کنم نمی تونم این کار رو بکنم.
میشه کمکم کنین؟
 

the_king

مدیرکل انجمن
من می خوام این برنامه رو تو یک برنامه دیگه استفاده کنم
و محل رسم نمودار مشخص نیست دقیق حدودا در x=300 و y=1000 باید صفر نمودار قرار بگیره هر چی خودم تلاش می کنم نمی تونم این کار رو بکنم.
میشه کمکم کنین؟

نقطه zeroPoint رو برای مشخص کردن محل نقطه (0 ,0) در نمودار بکار ببرید، توجه داشته باشید که این نقطه بر
اساس مختصات PictureBox و با محور های پیشفرض Graphics و بر حسب پیکسل سنجیده میشه، نقطه (0 ,0) در
PictureBox همیشه گوشه بالا سمت چپه و هر چه به سمت پایین حرکت کنید مقدار y افزایش پیدا می کنه.

کد:
    Private zeroPoint As Point

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height, Imaging.PixelFormat.Format24bppRgb)
        Dim g As Graphics = Graphics.FromImage(bmp)
        g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
        Dim rect As New Rectangle(0, 0, bmp.Width, bmp.Height)
        g.FillRectangle(Brushes.White, rect)
        g.TranslateTransform(zeroPoint.X, zeroPoint.Y)
        g.ScaleTransform(1, -1)
        Dim prevX As Integer, prevY As Integer
        For layerIndex As Integer = 1 To 2
            For Each row As DataGridViewRow In DataGridView1.Rows
                Try
                    Dim x As Integer = Val(row.Cells("ColumnX").Value.ToString())
                    Dim y As Integer = Val(row.Cells("ColumnY").Value.ToString())
                    Select Case layerIndex
                        Case 1
                            If row.Index > 0 Then
                                g.DrawLine(Pens.Black, prevX, prevY, x, y)
                            End If
                        Case 2
                            g.FillEllipse(Brushes.Yellow, x - 3, y - 3, 6, 6)
                            g.DrawArc(Pens.Blue, x - 3, y - 3, 6, 6, 0, 360)
                    End Select
                    prevX = x
                    prevY = y
                Catch ex As Exception
                End Try
            Next
        Next
        g.ResetTransform()
        g.DrawLine(Pens.Black, 10, zeroPoint.Y, bmp.Width - 15, zeroPoint.Y)
        g.DrawLine(Pens.Black, bmp.Width - 25, zeroPoint.Y - 3, bmp.Width - 15, zeroPoint.Y)
        g.DrawLine(Pens.Black, bmp.Width - 25, zeroPoint.Y + 3, bmp.Width - 15, zeroPoint.Y)
        g.DrawLine(Pens.Black, zeroPoint.X, 15, zeroPoint.X, bmp.Height - 10)
        g.DrawLine(Pens.Black, zeroPoint.X + 3, 25, zeroPoint.X, 15)
        g.DrawLine(Pens.Black, zeroPoint.X - 3, 25, zeroPoint.X, 15)
        For Each row As DataGridViewRow In DataGridView2.Rows
            Try
                Dim text As String = row.Cells("ColumnText").Value.ToString()
                Dim x As Integer = Val(row.Cells("ColumnPosX").Value.ToString())
                Dim y As Integer = Val(row.Cells("ColumnPosY").Value.ToString())
                g.DrawString(text, PictureBox1.Parent.Font, Brushes.Black, x + zeroPoint.X, zeroPoint.Y - y)
            Catch ex As Exception
            End Try
        Next
        g.Flush()
        PictureBox1.Image = bmp
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        zeroPoint = New Point(50, PictureBox1.Height - 100)
        With DataGridView1.Rows
            .Add(20, 50)
            .Add(150, 50)
            .Add(250, 200)
            .Add(150, 250)
            .Add(50, 150)
            .Add(50, 75)
            .Add(20, 50)
        End With

        With DataGridView2.Rows
            .Add("Text 1", 10, 35)
            .Add("Text 2", 150, 120)
        End With
    End Sub
 

جدیدترین ارسال ها

بالا