Pressentation av data Visual Studio/Basic

Permalänk
Medlem

Pressentation av data Visual Studio/Basic

Hej

Jag håller på och gör ett program i Visual Studio 2005 som ungefär en gång i minuten får in mätdata från en utomstående modul, nu vill jag pressentera datan på ett bra sätt.

Aldra helst med någon sorts graf, med en stapel för varje mätvärde eller punkter med en linie mellan.. något åt det hållet.

tanken är att man ska kunna välja hur långt bakåt i tiden man vill se datat och att den då visar säg dom senaste 30 mätningarna och när ett nytt värde dyker upp spottar den ut det sista och skjuter allt ett steg till vänster...

Så det jag undrar är om det finns någon bra metod för att göra detta på.

Eftersom jag är ny i Vb har jag lite svårt att hitta allt

T.ex. vad "ritar" man på? någon typ av form eller panel?

kodexempel eller en knuff i rätt riktning uppskattas alltid

tack på förhand
//Niklas

Permalänk
Medlem

En MSChart Control, kanske? Den är gratis. Googla för att ta reda på hur det går till. Om du är väldigt seriös finns det även kontroller att köpa hos ComponentSource.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Hedersmedlem

ZedGraph är också rätt trevlig i vissa projekt: http://zedgraph.org/wiki/index.php?title=Main_Page

Permalänk
Medlem

Jag har använt ZedGraph tidigare i ett projekt och den är rätt ok

Visa signatur

Har varit på detta forum på tok för länge...

Permalänk
Medlem

Okej MSChart verkar vara vad behöver

ZedGraph verkar vara ett bra alternativ annars, får undersöka saken vidare

Permalänk
Medlem

Har lite problem med att få igång MSChart,

jag har lagt till en DataGridView i Form1

och sen istort sätt klippt och klistrat in exempelkod från msdn:
http://msdn.microsoft.com/en-us/library/aa231230.aspx

' This code might be pasted into the Load event
' of a Form that has an MSChart control named
' "MSChart1".
Dim arrPrices(1 to 10)
Dim i As Integer
For i = 1 to 10
arrPrices(i)= i * 2
Next i
MSChart1.ChartData = arrPrices

men compilatorn säger att:
Name 'MSChart1' is not declared

vilket inte är så konstigt eftersom jag inte har deklarerat den, men hur gör jag det? lyckas inte hitta det kanske bara är jag som är blind men det känns som att det är självklar hur man gör och att ingen hjälpfil tar upp det..

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av niklu147
vilket inte är så konstigt eftersom jag inte har deklarerat den, men hur gör jag det?

Har du placerat en sådan kontroll på formuläret och heter den i så fall MSChart1?

Permalänk
Medlem

nej det är just det, ja trodde det skulle finnas nånting i toolboxen att dra in som hett något i stil med MSChart, men jag kan inte hitta någon :/ ialfall inte i toolbox/all windows forms

Permalänk
Hedersmedlem
Permalänk
Medlem

Ett litet problem med Zedgraph är string arrayer istället för listor

Visa signatur

Har varit på detta forum på tok för länge...

Permalänk
Medlem

okej, tack.. håller på att instalerar alla uppdateringar och mschart nu så hoppas jag att det fungerar sen

Permalänk
Medlem

hmm, lyckas inte få det att fungera, sitter i visual studio 2005, går det att använda sig av mschart då? kan bara hitta add-on till vs2008

Permalänk
Medlem

Det MSChart verkar inte fungra med Visual Studio 2005, men om det är någn som vet hur man lägger till/istallerar det i VS 2005 säg gärna till

annrs, finns det något motsvarande för vs2005 och tidigare?

kommer inte kunna kika in här igen förns på måndag nästa vecka men alla svar eller ideer uppskattas!

Permalänk

DevExpress har en utmärkt chart control.

http://www.devexpress.com/Products/NET/Controls/Charting/

Visa signatur

"Mies saa kaatua mutta ei karata." -- Adolf Ehrnrooth IR 7, Äyräpää 1944.

Permalänk
Medlem

okej, jag har dock ingen budget, så tyvär måste jag utesluta alla kontroller som kostar..

nu har jag iallafall lyckats få tag i VB 2008 och installerat allt enligt
Elgots tips

http://aspnetnova.blogspot.com/2008/12/how-to-add-ms-chart-co...

men jag får det inte riktigt att fungera

Jag lägger till en chart (chart1) i form1, sen vill jag kunna plotta linjediagram tex två st i samma graf, jag kommer tex att ha två serier med säg 30 mätvärden i varje, hur gör jag då?

någon kunnig som skulle kunna bifoga en kodsnutt, har povat exemplen på msdn men det fungerar inte riktigt eller tar upp fel saker..

tack på förhand

niklas

Permalänk
Hedersmedlem

Så här kan man göra i c# men det borde vara lätt att anpassa till vb.

chart1.Series.Clear(); System.Windows.Forms.DataVisualization.Charting.Series s1 = new System.Windows.Forms.DataVisualization.Charting.Series("sin"); System.Windows.Forms.DataVisualization.Charting.Series s2 = new System.Windows.Forms.DataVisualization.Charting.Series("cos"); s1.LegendText = "sin"; s2.LegendText = "cos"; s1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; s2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StepLine; for (double i = 0; i < 2 * Math.PI; i += .05) { s1.Points.Add(Math.Sin(i)); s2.Points.Add(Math.Cos(i)); } chart1.Series.Add(s1); chart1.Series.Add(s2);

Edit: såhär kanske?

Chart1.Series.Clear() Dim s1 = New System.Windows.Forms.DataVisualization.Charting.Series("sin") Dim s2 = New System.Windows.Forms.DataVisualization.Charting.Series("cos") s1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line s2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StepLine For i As Double = 0 To 2 * Math.PI Step 0.05 s1.Points.Add(Math.Sin(i)) s2.Points.Add(Math.Cos(i)) Next Chart1.Series.Add(s1) Chart1.Series.Add(s2)

Permalänk
Medlem

Tack..!! det fungera på första försöket

tänkte bara om du vet hur man kan ta bort en data point
motsvarande

s1.Points.Add(Math.Sin(i))

så att man kan köra en live plot, dvs man gör en

s1.Points.Add
s1.Points."Remove?"
Chart1.Update()

tanken är att man ska kulla köra "live" plotten väldigt läng, något man bör tänka på så att man inte tex fyller upp hela minnet osv..

Permalänk
Hedersmedlem

s1.Points.RemoveAt() finns om det är det man vill göra, men jag misstänker att det är smidigare att rita om hela diagrammet (särskilt om man inte har så många punkter). Testa följande med en klocka:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Static d As Double = 0 Chart1.Series.Clear() Dim s1 = New System.Windows.Forms.DataVisualization.Charting.Series("sin") Dim s2 = New System.Windows.Forms.DataVisualization.Charting.Series("cos") s1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line s2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StepLine For i As Double = 0 To 2 * Math.PI Step 0.05 s1.Points.Add(Math.Sin(i + d)) s2.Points.Add(Math.Cos(i + d)) Next Chart1.Series.Add(s1) Chart1.Series.Add(s2) d = d + 0.1 End Sub

Permalänk
Medlem

Okej tack

Finns det nån stans man kan läsa om hur man kan manipulera axlar osv, tex så vill jag att ett mätvärde ska plottas mot tiden den togs, så att varje mätdata har en "timestamp" är det möjligt?

Vet inte om jag är ute på djupt vatten här men kan man få den att plotta, tex 30 mätärden med jämt mellanrum på x-axeln där varje x värde är en specefik tid och mätvärdet på y-axeln eller måste man göra en egen plott funktion med typ picturebox då?

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av niklu147
Vet inte om jag är ute på djupt vatten här men kan man få den att plotta, tex 30 mätärden med jämt mellanrum på x-axeln där varje x värde är en specefik tid och mätvärdet på y-axeln eller måste man göra en egen plott funktion med typ picturebox då?

För att få jämna mellanrum är det
IsXValueIndexed = true;
man vill använda.

Testa till exempel:

Dim s1 = New System.Windows.Forms.DataVisualization.Charting.Series("uu") s1.IsXValueIndexed = true s1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column; For i As Double = 0 To 5 s1.Points.AddXY(System.DateTime.Now.AddDays(i*i), i) Next Chart1.Series.Add(s1)

Permalänk
Medlem

okej, ska prova det

och tack för hjälpen