2013-05-24 2 views
10

Ich habe eine Gaußkurve über gnuplot gezeichnet und ich möchte eine Linie haben, die von der x-Achse nach oben geht , stoppt genau dort, wo es auf die Kurve trifft, und geht senkrecht nach links, um die y-Achse zu treffen. Idealerweise werden die Werte auf beiden Achsen angezeigt und ein Symbol angezeigt, wo es sich mit der x-Achse schneidet.Gnuplot - zeichne eine vertikale Linie von der x-Achse zum Plot und von der Plot zur y-Achse

Was ist der richtige Weg, dies in gnuplot hinzuzufügen? Ich habe versucht, mit Pfeilen herumzuspielen, aber ich bin ein Neuling, der gnuplot macht und scheint keinen Weg zu finden, um das zu erreichen, was ich brauche.

Antwort

17

Ich habe es geschafft, eine einfache Lösung für meine Bedürfnisse zu finden. Die arrow kann tatsächlich mit nohead verwendet werden, indem die y Koordinaten der to als die Funktion der Handlung selbst angegeben werden.

Also sagen wir, wir haben eine Funktion f (x), und wir wollen eine Linie von x = 3 bis f (3) und die entsprechende horizontale Linie y = f (3) zeichnen, alles was wir tun müssen ist 2 Pfeile hinzufügen:

set arrow from 3,0 to 3,f(3) nohead 
set arrow from 0,f(3) to 3,f(3) nohead 

Da ich auch Ticks hinzugefügt werden wollte, wo die Linie mit der Achse schneidet, wenn sie fehlen, könnte man dann tun:

set xtics add (3 3) 
set ytics (f(3) f(3)) 

Da es könnte sein, dezimal Orte beteiligt auf der y Achse muss man vielleicht auch so etwas tun (in diesem Fall hat es 3 Nachkommastellen) :

set format y "%1.3f" 

Ich habe es nicht geschafft, einen Weg zu finden, ein Etikett unter einem tic auf der x-Achse, aber die oben genügte für meine Bedürfnisse zu tun. Ich hoffe, es hilft jemandem, der nach der gleichen Lösung sucht.

+1

Sie können eine Bezeichnung für den Tic hinzufügen, indem Sie 'set xtics add (" $ x_1 $ "3)' anstelle von 'set xtics add (3 3)' verwenden. Der erste Wert ist das Label. – Tymric

1

ich dieses Problem in der Vergangenheit in der folgenden Art und Weise gelöst habe:

das Paar (x, y) des Punktes auf der Kurve wissen, wo Sie Ihre Linien gehen wollen, tun: - berechnet eine Menge von Werten (x, {0..y}), und plotten Sie es. Dies wäre die vertikale Linie - - berechnen Sie eine Reihe von Werten ({0..x}, y), und plotten Sie es. Dies wäre die horizontale Linie

Alternativ können Sie Dummy-Arrays a (x, {gesamter y-Bereich}) und ({ganzer x-Bereich}, y) erstellen und diese von Ihrem Ursprung bis zum Punkt (x, y) durch Angabe des (x, y) Punktes in der Bereichseinstellung.

Vielleicht sind dies nicht die effizientesten Möglichkeiten, aber beide funktionierten für mich. Ich habe diese Manipulationen in Perl Data Language (PDL) durchgeführt, indem ich ein Perl-Skript verwendet habe, aus dem ich eine gnuplot-Konfigurationsdatei schreibe und gnuplot mit "system" aufruft.

Hoffe, das hilft!