2013-05-24 16 views
10

Mam krzywą Gaussa narysowaną przez gnuplot i chcę mieć linię, która idzie w górę od osi X zatrzymuje się dokładnie w miejscu, w którym uderza w krzywą, i prostopadle w lewo, aby uderzyć w oś y, najlepiej wyświetlając wartości w obu osiach i wyświetlając symbol, w którym przecina się z osią x.Gnuplot - narysuj pionową linię od osi X do wykresu, a od wykresu do osi Y

Jaki jest właściwy sposób dodania go do gnuplot? Próbowałem bawić się strzałami używając nohead ale jestem nowicjuszem do gnuplot i nie mogę znaleźć sposobu na osiągnięcie tego, czego potrzebuję.

Odpowiedz

17

Udało mi się znaleźć proste rozwiązanie dla moich potrzeb. Model arrow może być używany z nohead przez podanie współrzędnych jako funkcji samego wykresu.

Powiedzmy, że mamy funkcję f (x), i chcemy narysować linię od x = 3 do f (3) i odpowiadającą linię poziomą y = f (3), wszystko, co musimy zrobić, to dodać 2 strzały:

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

Od chciałem też tiki należy doliczyć gdzie linia przecina się z osią, jeśli są one brakuje, można wtedy zrobić:

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

Ponieważ nie może być dziesiętny miejsca związane z osią y może być również potrzebne zrobienie czegoś podobnego (w tym przypadku ma 3 miejsca dziesiętne) :

set format y "%1.3f" 

nie udało mi się znaleźć sposób, aby zrobić etykietę pod spodem tic na osi x, ale przede wystarczyło do moich potrzeb. Mam nadzieję, że pomoże to komuś, kto szuka tego samego rozwiązania.

+1

Możesz dodać etykietę tic, używając 'set xtics add (" $ x_1 $ "3)' na przykład zamiast 'set xtics add (3 3)'. Pierwsza wartość to etykieta. – Tymric

1

Mam rozwiązać ten problem w przeszłości w następujący sposób:

znając parę (x, y) w punkcie na krzywej, w którym chcesz swoje linie, aby przejść do wykonaj: - obliczenia zestaw wartości (x, {0..y}) i narysuj go. To byłaby linia pionowa - - obliczyć zestaw wartości ({0..x}, y) i narysować go. To byłaby linia pozioma

Alternatywnie, możesz utworzyć atrapę tablic a (x, {cały zakres y}) i ({cały zakres x), y) i narysować je od swojego początku do punktu (x, y), określając punkt (x, y) w ustawieniu zakresu.

Być może nie są to najskuteczniejsze sposoby, ale obie zadziałały u mnie. Zrobiłem te manipulacje w Perl Data Language (PDL), używając skryptu Perla, z którego piszę plik konfiguracyjny gnuplot i wywołuję gnuplot za pomocą "systemu".

Mam nadzieję, że to pomoże!

Powiązane problemy