2014-11-14 5 views
1

У меня есть файл с несколькими наборами данных, который выглядит примерно так:GNUPLOT: Ploting наборы данных из одного файла

# Isochrone Z = 0.00800  Age = 1.000e+07 yr 
# Mu Mb Mv Mr Mi Mj Mh Mk Flum 
    14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740 
    13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581 
... 
# Isochrone Z = 0.00800  Age = 1.122e+07 yr 
# Mu Mb Mv Mr Mi Mj Mh Mk Flum 
    14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740 
    13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581 
... 

Мне нужно, чтобы иметь возможность использовать функцию индекса, например:

plot 'file' index n u 1:2 

, поэтому я могу построить n-й набор данных или набор наборов данных (index a:b), но я получаю ошибку x range is invalid. Вероятно, потому что прокомментированные строки не рассматриваются как две пустые строки. Может ли это быть исправлено?

Кроме того, можно ли включить в заголовок сюжета значение Возраст?

+0

plot 'isoc_z008s.dat' i 1 u ($ 9- $ 10): 10 w l – Jaka

+0

игнорировать параметры использования, я удалил несколько столбцов, мне нужно построить Mb-MV по оси x и MV на y. – Jaka

+0

с индексом 0, я получаю график всего файла. Заголовки не распознаются как границы набора данных. – Jaka

ответ

1

Из справки gnuplot: «Наборы данных разделены парами пустых записей». Я предполагаю, что вы не используете пустые строки в качестве разделителей наборов данных. Если ваш файл выглядит следующим образом:

# Isochrone Z = 0.00800  Age = 1.000e+07 yr 
# Mu Mb Mv Mr Mi Mj Mh Mk Flum 
    14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740 
    13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581 
# Isochrone Z = 0.00800  Age = 1.122e+07 yr 
# Mu Mb Mv Mr Mi Mj Mh Mk Flum 
    14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740 
    13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581 

Тогда следующая команда Баш можно добавить пустые строки без необходимости вручную редактировать содержимое файла:

[email protected]:~$ sed 's/# Isochrone/\n\n# Isochrone/g' file 


# Isochrone Z = 0.00800  Age = 1.000e+07 yr 
# Mu Mb Mv Mr Mi Mj Mh Mk Flum 
    14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740 
    13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581 


# Isochrone Z = 0.00800  Age = 1.122e+07 yr 
# Mu Mb Mv Mr Mi Mj Mh Mk Flum 
    14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740 
    13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581 

Команда выше вставляет две пустые строки перед # Isochrone каждый раз, когда он находит это. И теперь вы можете использовать команду внутри Gnuplot:

plot "< sed 's/# Isochrone/\\n\\n# Isochrone/g' file" index 0 u 1:2 

Примечания вам нужно, чтобы избежать обратных косых черт в пределах Gnuplot. Чтобы получить возраст вы можете использовать аналогичный подход с системным вызовом в Gnuplot:

n = 1 # First record 
age_1 = system("awk '/Age/{i++}i==" . n . "{print $(NF-1); exit}' file") 
print age_1 
1.000e+07 

Или получить все из них в то же время и хранить их в строке:

age = "" 
do for [n = 1:2] { 
age = age . " " . system("awk '/Age/{i++}i==" . n . "{print $(NF-1); exit}' file") 
} 
print age 
1.000e+07 1.122e+07 

Теперь вы можете удобно использовать один и тот же индекс для index и название:

plot for [i=1:2] "< sed 's/# Isochrone/\\n\\n# Isochrone/g' file" \ 
index (i-1) u 1:2 title "Age = " . word(age,i) . " years" 

enter image description here

Вы изучаете магнитный поток в звездах?

+0

Удивительно, спасибо! :) Нет, мне просто нужно оценить возраст звездного кластера, сравнив его диаграмму HR и приведенную выше модель. – Jaka

+0

@ Jaka Я вижу, что вы новичок. Если ответ решает ваш вопрос, пожалуйста, подумайте о принятии его в качестве ответа. Также, пожалуйста, подумайте над ответом. Эти два действия дают репутацию человеку, который помог вам, а также служить показателем для других пользователей, просматривающих сайт о том, насколько полезен ответ. – Miguel

+0

Sory, я принял его сейчас, но я не могу его проголосовать, поскольку у меня недостаточно репутации. – Jaka

Смежные вопросы