2016-03-21 6 views
0

У меня есть файл, где мои данные разделены на несколько индексов. Я хотел бы нарисовать некоторые или все индексов в виде сложенных заполненных кубов, добавив значения выбранных предыдущих индексов к значениям текущего индекса. Я не мог найти способ использовать функцию суммы, как в случае данных, упорядоченных как столбцы в одном индексе (как в this question), даже используя псевдоколонку (-2) в качестве номера индекса.Gnuplot Stacked Filledcurves из разных индексов

Важное примечание: каждый индекс как строго идентичный набор значений x, отличаются только значения y.

Есть ли способ сделать что-то вроде

p 'data.dat' index (sum(ind=1,3,4,5) ind) u 1:2 w filledcurve x1 t 'Sum(1,3,4,5)', '' index (sum(ind=1,2,5) ind) u 1:2 w filledcurve x1 t 'Sum(1,2,5)' 

внутри Gnuplot или мне придется прибегнуть к сценарию (возможно изменение одного в this answer)?

+0

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

ответ

0

Вы можете сделать это с некоторой помощью вне gnuplot (вызывается внутри gnuplot). Представьте, у вас есть следующий файл данных с 4-х индексов (от 0 до 3):

1 2 
2 3 


1 5 
2 5 


1 0 
2 3 


1 4 
2 3 

Теперь говорят, что мы хотим подвести 1 и 2 и 0 и 3. Первая сумма должна возвращать:

1 5 
2 8 

в то время как вторая сумма должна возвращать

1 6 
2 6 

мы можем выбрать блоки мы хотим с помощью set table:

set table "sum1" 
plot for [i in "1 2"] "data3" index 0+i pt 7 not 

set table "sum2" 
plot for [i in "0 3"] "data3" index 0+i pt 7 not 
unset table 

Теперь используйте sed трубопровод для удаления пустых строк и smooth freq просуммировать при равных значениях х:

plot "< sed '/^\s*$/d' sum1" smooth freq t "sum1", \ 
    "< sed '/^\s*$/d' sum2" smooth freq t "sum2" 

enter image description here

+0

Он работает как шарм! Благодарю. – Jep

0

Хотя вы можете сделать это с помощью функций и переменных gnuplot 4.4+, это будет не очень эффективно, поскольку вы хотите выполнить операцию на нескольких удаленных линиях в вашем файле, что на самом деле является массивы. Gnuplot не предназначен для этого, файлы данных должны иметь структуру, достаточно близкую к тому, что вы хотите построить. Я советую вам попытаться создать файл с такой структурой, например. имеют значения, которые вы хотите суммировать в одной строке в разных столбцах.

+0

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

+0

Я не уверен, зачем нужно делать два прохода. Вы говорите, что ваши данные представляют собой массив y = A (x, index). Вместо того, чтобы писать A (:, i) для всех i (т. Е. В общей сложности N таблиц из 2 столбцов), почему бы не написать A (:, :)? (одна таблица из столбцов N + 1). Затем gnuplot может обрабатывать то, что вы хотите сделать. – Joce

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