2013-05-24 45 views
10

Tôi có đường cong Gauss được vẽ qua gnuplot và tôi muốn có một đường thẳng lên từ trục x , dừng chính xác nơi nó chạm vào đường cong, và đi vuông góc với bên trái để nhấn trục y, lý tưởng hiển thị các giá trị ở cả hai trục và hiển thị một biểu tượng trong đó nó giao nhau với trục x.Gnuplot - vẽ một đường thẳng đứng từ trục x đến ô, và từ ô tới trục y

Cách thích hợp để thêm điều này vào gnuplot là gì? Tôi đã cố gắng để chơi xung quanh với mũi tên sử dụng nohead nhưng tôi là một newbie để gnuplot và dường như không thể tìm thấy một cách để đạt được những gì tôi cần.

Trả lời

17

Tôi đã tìm được giải pháp đơn giản cho nhu cầu của mình. arrow thực sự có thể được sử dụng với nohead bằng cách chỉ định tọa độ y của to làm chức năng của ô. Vì vậy, hãy nói rằng chúng ta có một hàm f (x), và chúng ta muốn vẽ một đường từ x = 3 đến f (3) và đường nằm ngang tương ứng y = f (3), tất cả những gì chúng ta phải làm là thêm 2 mũi tên:

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

Kể từ khi tôi cũng muốn tics được thêm vào nơi dòng giao cắt với trục, nếu họ đang mất tích, một sau đó có thể làm:

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

Kể từ khi có thể có chữ số thập phân những nơi liên quan đến trục y cũng có thể cần phải làm một cái gì đó như thế này (trong trường hợp này nó có 3 chữ số thập phân) :

set format y "%1.3f" 

Tôi không tìm cách tạo nhãn bên dưới dấu x trên trục x, nhưng ở trên đủ cho nhu cầu của tôi. Hy vọng nó sẽ giúp cho người khác tìm kiếm giải pháp tương tự.

+1

Bạn có thể thêm nhãn cho tic bằng cách sử dụng 'set xtics add (" $ x_1 $ "3)' ví dụ thay vì 'set xtics add (3 3)'. Giá trị đầu tiên là nhãn. – Tymric

1

Tôi đã giải quyết vấn đề này trong quá khứ theo cách sau:

Biết cặp (x, y) của điểm trên đường cong nơi bạn muốn dòng của bạn để đi tới, làm: - tính toán một thiết lập các giá trị (x, {0..y}) và vẽ nó. Đây sẽ là đường thẳng đứng - - tính toán một tập hợp các giá trị ({0..x}, y) và vẽ nó. Đây có thể là đường ngang

Hoặc, bạn có thể tạo mảng giả a (x, {toàn bộ y)} và ({toàn bộ x phạm vi}, y) và vẽ chúng từ gốc của bạn đến điểm (x, y) bằng cách xác định điểm (x, y) trong cài đặt phạm vi.

Có thể đây không phải là cách hiệu quả nhất, nhưng cả hai đều hiệu quả với tôi. Tôi đã thực hiện các thao tác này trong Ngôn ngữ dữ liệu Perl (PDL), sử dụng một tập lệnh Perl, từ đó tôi viết một tệp cấu hình gnuplot và gọi gnuplot bằng cách sử dụng "hệ thống".

Hy vọng điều này sẽ hữu ích!