Hallo,
ich habe mich heute mit ZedGraph eingelesen und es auch geschafft, anhand der Beispiele aus zwei Arrays einen Graphen zeichnen zu lassen. Allerdings funzt dies ned so richtig wie ich will und die Skalierung (die ja eigentlich automatisch geschehen sollte) passiert nicht.
private void qwaehlen_Click(object sender, EventArgs e)
{
source.pfad();
pfadbox.Text = source.getpath();
path = source.getpath();
if (path != null)
{
StreamReader ausles = new StreamReader(path);
{
string zeile;
//inhaltbox.Text = ausles.ReadToEnd();
while (zaehler <= 1000)
{
zaehler++;
// ergänzung
zeile = ausles.ReadLine();
//MessageBox.Show(zeile);
if (zeile == null)
{
break;
}
else
{
char[] sep = { ' ', '\t' };
string[] x = zeile.Split(sep, 5);
inhaltbox.Text += zeile + "\r\n";
//try/catch, daist in dem fall nicht notwendig in diversen Zeilen keine Zahlen stehn
try
{
xachse[zaehler] = Convert.ToInt32(Convert.ToDouble(x[0]) * 100);
yachse[zaehler] = Convert.ToInt32(x[2]);
}
catch
{
}
// ergänzung
}
}
}
}
}
Dies ist der Code, in dem ich meine Arrays mit Daten fütter die aus ner Textdatei kommen. Das funzt auch soweit.
private void zeichnen_Click(object sender, EventArgs e)
{
CreateGraph(zg1);
SetSize();
}
private void CreateGraph(ZedGraphControl zg1)
{
// get a reference to the GraphPane
GraphPane myPane = zg1.GraphPane;
// Set the Titles
myPane.Title.Text = "Diagramm";
myPane.XAxis.Title.Text = "Zeit in ms";
myPane.YAxis.Title.Text = "Temperatur in °C";
myPane.XAxis.MajorGrid.IsVisible = true;
myPane.YAxis.MajorGrid.IsVisible = true;
// Make up some data arrays based on the Sine function
PointPairList list1 = new PointPairList();
for (int i = 2; i < 100; i++)
{
if (yachse[1] < 0)
{
list1.Add(xachse[i], yachse[i]);
}
}
LineItem myCurve = myPane.AddCurve("Temperatur",
list1, Color.Red, SymbolType.None);
// Tell ZedGraph to refigure the
// axes since the data have changed
zg1.AxisChange();
}
private void Form1_Resize(object sender, EventArgs e)
{
SetSize();
}
private void Form1_Load(object sender, EventArgs e)
{
SetSize();
}
und das is der Code für das zeichnen des Diagramms. Das funzt fast ned...
Hi,
also was mir jetzt mal auffällt ist, dass du die Funktion CreateGraph in einer Funktion aufrufst, die ja einen Klick erfordert:
private void zeichnen_Click(object sender, EventArgs e)
{
CreateGraph(zg1);
SetSize();
}
Da ist es dann auch logisch, dass du erst klicken musst, damit der Graph kommt.
Soll der Graph sofort gezeichnet werden, würde ich den Aufruf an CreateGraph() halt einfach ans ende der Funktion hängen, wo du die Datei auswählst.
Was macht die Funktion SetSize? So wie du das aufgebaut hast, müsste er schon automatisch skalieren.
MFg,
Daniel
ja, er soll erst auf click des buttons zeichnen. aber das macht er irgendwie ja ned richtig. erst wenn ich im diagramm nen fenster auswähl.
das setsize() brauch ich dann ned, oder wie?
Also ich hab das SetSize noch nie benutzt, ist auch in diesem Fall nicht notwendig.
Das mit dem Klick müsste dann schon passen.
Was heißt denn "er zeichnet nicht richtig" genau? 😉
Er zeichnet nicht richtig bedeutet, dass er nicht zeichnet, bis ich nen Fenster im Diagramm zieh oO
Also in meinem Projekt sieht das z.B. so aus:
public void setValues(List<Messspur> spuren)
{
int xz = 0;
lst = spuren;
foreach (Messspur spur in spuren)
{
double[] X = new double[spur.m_Values.Count];
double[] Y = new double[spur.m_Values.Count];
for (int i = 0; i < spur.m_Values.Count; i++)
{
X[i] = (double)((Messwerte)spur.m_Values[i]).x_pos;
Y[i] = ((Messwerte)spur.m_Values[i]).o_diameter;
}
zedGraphControl1.GraphPane.Title.Text = "Auswertung - " + spur.m_zskType + " / " + spur.m_zskSpur;
zedGraphControl1.GraphPane.XAxis.Title.Text = "Position";
zedGraphControl1.GraphPane.YAxis.Title.Text = "Durchmesser";
// Skalierung
zedGraphControl1.GraphPane.XAxis.Scale.Min = spur.xMin;
zedGraphControl1.GraphPane.XAxis.Scale.Max = spur.xMax;
zedGraphControl1.GraphPane.AddCurve("Messspur 1", X, Y, colors[xz], ZedGraph.SymbolType.None);
xz++;
}
zedGraphControl1.AxisChange();
}
und wird sofort gezeichnet.
Sieht aber bei dir auch vergleichbar aus 😉
ich hab keine derartige skalierung, werd das aber definitiv mal ausprobieren 😁
Bei mir ist auch als Minimum nur der Minimalwert der Messwerte, als Maximalwert halt der Maximalwert der Messwerte.
Soviel ich mich erinnern kann ging es aber auch ohne das manuelle setzen der Skalierung.
mein problem ist halt, dass er das ding wirklich erst zeichnet nachdem ich in das Ding reinklicke und ein Fenster ziehe... ansonsten wär mir die Auto-Skalierung schon recht
Hast dus nachm zeichnen schon mal mit Update() oder Refresh() des Fensters oder des ZedGraph Controls probiert?