Принудительно построить 1-ю точку интервала точек

#plot #gnuplot #intervals

#построение графика #gnuplot #интервалы

Вопрос:

Я попытался построить график с помощью команды pointinterval, и я хотел бы, чтобы была отображена 1-я точка моих данных, что не относится к горячей стороне моего первого графика. Действительно, мы видим фиолетовую пунктирную линию, но нет точки в нижнем левом углу (около y = 0,35). Горячая сторона: первые точки начинаются с y   = 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) но похоже, что вам может потребоваться другое смещение для каждого файла. В этом случае вы могли бы преобразовать смещение в массив и эмпирически загрузить его соответствующими значениями.