Pressentation av data Visual Studio/Basic

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Mar 2005

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.

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

Ljud
PC → ODAC → Objective2 → Sennheiser HD650/Ultrasone PRO 900
Portabelt → Sennheiser Momentum/Sennheiser Urbanite XL/Sennheiser Momentum In-Ear

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

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

Trädvy Permalänk
Medlem
Registrerad
Jul 2001

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

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

Okej MSChart verkar vara vad behöver

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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..

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
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?

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
Trädvy Permalänk
Medlem
Registrerad
Jul 2001

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

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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!

Trädvy Permalänk
Medlem
Plats
Finland
Registrerad
Okt 2002

DevExpress har en utmärkt chart control.

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

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

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)

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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..

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

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å?

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
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)

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2009

okej, ska prova det

och tack för hjälpen