2011-02-12 15 views
12

Hem verileri hem de gnuplot komutlarını saklayan tek bir .plt dosyasına sahip olmak istiyorum. Benim verignuplot'taki aynı standart giriş verisinden çeşitli grafikler nasıl yapılır?

# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 

benziyor ve iki parsel karşılık gelmektedir: (x1, y1) ve (x2, y2).

ben gibi "-" kullanabilirsiniz biliyorum:

plot "-" using 1:2 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

Ama bu sadece bir arsa, yani (x1, y1) oluşturacaktır. Ben

plot "-" using 1:2, "-" using 3:4 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

gibi bir şey yapmaya çalışıyorum ama gnuplot ikinci "-" için standart girişten yeni bir veri kümesini beklediğini beri besbelli çalışmıyor.

Notlar:

  1. Ben verilerin stilini değiştirmek mümkün değil. Dört sütun halinde gelir.
  2. reread ile yapabilirim, ancak bu iki dosya gerektirir. Gerçekten sadece bir dosya istiyorum.

cevap

7

Sen yol hakkında bir şey değiştirmeden bunu yapamaz orada bakmak isteyebilirsiniz: ayrıca bu soruya bir benzerlik var gibi görünüyor veriyi sen gir. Gnuplot verisini standart girişle beslerken, birden fazla veri kümesinin aralarında iki boş satırla sınırlandırılmasını veya birbirini izleyen satırlarda araya sokulmasını bekler. Seçenekler şunlardır:

  • tamamen farklı arsa komutları içine iki veri setleri besleyin.

  • Değişim dosya biçimini veri setleri aralarında boş satırlar var öyleyse, o zaman indeksi ile hepsini başvuru.

  • Değişim alternatif hatları farklı veri kümelerini temsil ettiğini, daha sonra her ile hepsini referans böylece dosya biçimidir.

  • bir dosya birbiri içine çizim komut veri yerleştirin ve sonra farklı maddeleri her defasında daha sonra daha veri dosya başvuru.

How do I plot several data sets in a single file başlayan her ve endeksi komutları için bir intro var? Bunlar, bu tür bir şey için gnuplot'a inşa edilen tek tesisler ve aynı zamanda ne soruyorsun? veri biçimlendirmeyi zaten değiştirdiğinizden çok iyi, çünkü bu hiç ummadığınız gibi çalışmayacaktı.

+0

Teşekkürler. Neyin yapılabileceğini ve ne yapamayacağını bilmek güzel (bunun yapılmasını diliyorum). Dosyamı değiştirmeme rağmen, bir şekilde C++ kodu orijinal formatı daha hızlı üretecek ve daha çok beğendim. Neyse, sadece bir tane hızlı soru: Görünüşe göre "-" ve "her" yi birleştiremiyorum, değil mi? – Mahdiyar

+0

Lütfen bunu nasıl yapacağınıza bir örnek verebilir misiniz? gnuplot, ne yaparsam yap, sonuna kadar (ilk çizimi yaparken) okur. –

4

ben bu dosyayı düzenleyebilir ne kadar emin değilim, ama tidiest yolu bir kabuk/toplu komut dosyasında şeyi koymak için muhtemelen (eğer linux veya pencerelerinde bulunan?)

linux ben bu

#!/bin/bash 

#put my data in a file 
echo " 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
" > my_dat.dat 

#launch gnuplot 
gnuplot<<EOF 
#gnuplot commands here 
set output "test.ps" 
set term postscript 

plot "my_dat.dat" u 1:2, \ 
    "my_dat.dat" u 3:4 

set term pop 
set output 

EOF 

# cleanup 
rm my_dat.dat 

gibi bir şey Sonra ben yukarıdaki komutları koymak dosyayı WRX ve çalıştırmak + chmod yapın.

Not:

gnuplot stdin, how to plot two lines?

Yani sen de

+0

teşekkür ederiz. Evet, Linux'tayım. Aslında, veriyi oluşturmuş olan C++ kodunu değiştirerek biçimlendirilme şeklini değiştirmeyi başardım. Yani benim sorunum şimdi gitti. Ama yine de bunu nasıl yapabilirim merak ediyorum ki yukarıdaki formatta bir tek dosya.plt ile arsa görmek ve '$ gnuplot file.plt'. – Mahdiyar

+0

@Mahdiyar Evet, ben de bunu merak ediyorum. Scripting ile gnuplot kullanmak her zamanki gibi bir yoldur (kabuktan C++ programınızı çağırabilir ve her şeyi 1 satır ile çalışabilirsiniz), bkz. - http://t16web.lanl.gov/Kawano/gnuplot/intro/working Bunun için daha fazla -e.html. – Tom

+2

Uygulamamın tek bir plottable dosyası oluşturmasını istediğim için bu kabuk komut dosyası yöntemini beğendim. Dosya sistemini temiz tutmak için bash tempfile komutunu kullanın: 'tmpFile = \' tempfile \ '' ve sonra arsa komutunu kullanıp "plot" $ tmpFile "1: 2 ...' –

1

Bu eski bir yazı olduğunu biliyorum ama başka durumda birisi başka bir stratejiye işaret etmek istiyorum hala bu konuyla mücadele:

Ayrıca gibi, iki kez komplo komutu ve giriş verileri kullanabilirsiniz:

plot "-" using 1:2, "-" using 3:4 
# 1 2 3 4 
    5 6 7 8 
    e 
    1 2 3 4 
    5 6 7 8 
    e 

Gnuplot bu durumda iki bloku bekleyecektir. Komutları değiştirmek istemediğimde ve Gnuplot'u boru ile beslerken bunu çok faydalı buluyorum. Gerçek zamanlı bir senaryoda (veri boyutuna bağlı olarak) bu, sabit sürücüdeki bir dosyaya arabelleğe alınmasından daha hızlıdır.

Tecrübemde, komut dosyanızdaki verileri bir kereden fazla basmak için gereken kodun doldurulması için gerekli kod miktarı çok düşük. gp5.0 beri

2

Yeni seçenek (ayrıca help inline data bakınız):

$dataset << EOD 
1 2 3 4 
5 6 7 8 
EOD 

plot $dataset using 1:2, $dataset using 3:4 
İlgili konular