#plot #gnuplot #intervals
#построение графика #gnuplot #интервалы
Вопрос:
Я попытался построить график с помощью команды pointinterval, и я хотел бы, чтобы была отображена 1-я точка моих данных, что не относится к горячей стороне моего первого графика. Действительно, мы видим фиолетовую пунктирную линию, но нет точки в нижнем левом углу (около y = 0,35).
Мой код включает цикл for и показан ниже:
plot for [i=1:words(FILES)] myDataFile(i) u (column(1)):(column(6)/word(UTAUS_ch,i)) w lp pointinterval 2 pt myPointtype(i) ps myPointsize(i) dt myDashtype(i) lt myLinetype(i) lw myLinewidth(i) lc rgb myLinecolor(i) title myTitle(i)
Если я построю график с помощью интервала точек 1, мы увидим, что эти точки существуют (см. Рисунок ниже).
Как я могу принудительно отобразить первую точку с помощью pointinterval?
Возможно ли построить половину моих точек через каждые 2 точки, а другую часть через каждые 2 точки, но со смещением в 1 точку?
Комментарии:
1. как выглядят ваши данные? только первые несколько строк. Возможно, есть заголовки или строки комментариев?
2. Мои данные состоят из: 119 строк заголовков следующим образом «# столбец 1: КООРДИНАТЫ # столбец 2: ТЕМПЕРАТУРА …» и 151 строки данных (с 119 столбцами).
3. Спасибо. ну, @Ethan объяснил, как
pointinterval
на самом деле работает.
Ответ №1:
Я не думаю, что вы сможете делать то, что хотите, используя pointinterval
свойство. Он разработан таким образом, что смещение начальной точки увеличивается на единицу для каждого нарисованного графика с целью уменьшения вероятности перекрытия символов точек с последовательных графиков. Это в точности противоположно тому, что вы пытаетесь сделать.
Поэтому я предлагаю не отображать каждый набор данных with linespoints pi N
. Вместо этого постройте каждый набор данных дважды, один with lines
и один раз with points
, используя фильтр в using
спецификаторе, подобный этому:
plot FOO using 1:2 with lines, '' using ((int($0)%N) ? NaN : $1) : 2 with points
Фильтр (int($ 0)%N? NaN : $ 1) подавляет все точки, номер строки которых неравномерно делится на N. По сути, это то, что делает pointinterval
свойство, за исключением того, что pointinterval
пропускает точки вне диапазона и точки, недоступные для других точек, а не строго использует номер строки в качестве индекса.
Отредактируйте, требуются ли отдельные значения смещения из-за несоответствия координат x:
array offset[N] = [1,1,2,-1, and so on]
plot for [i=1:N]
MyDataFile(i) using 1:2 with lines,
'' using (((int($0) offset[i] % N) ? NaN : $1) : 2 with points
Комментарии:
1. Спасибо, Итан. Я пробовал это, но возникает та же проблема:
N=2 plot for [i=1:words(FILES)] myDataFile(i) u (column(1)):(column(2)/(word(UTAUS_ch,i))) w lines, for [i=1:words(FILES)] myDataFile(i) u ((int($0)%N) ? NaN : (column(1)):(column(2)/(word(UTAUS_ch,i))) w points
я также пытался подавить заголовки, чтобы иметь только точку для построения графика, но у меня все еще была проблема.2. Если ваши файлы данных не имеют согласованных координат x для заданного номера строки, это отдельная проблема. Вы можете настроить начальную точку для конкретного файла, добавив смещение к фильтру:
using ( (int($0) offset)%N ? NaN : $1)
но похоже, что вам может потребоваться другое смещение для каждого файла. В этом случае вы могли бы преобразовать смещение в массив и эмпирически загрузить его соответствующими значениями.