2013-10-01 5 views
5

Кажется, я с трудом нахожу ответ на этот вопрос в Интернете. Название является основным вопросом, но, если быть более конкретным, я бы хотел иметь две оси x, одну в верхней части фигуры, которая зависит от той, что находится внизу. Однако это не простая взаимосвязь, т. Е. X2! = 5 * x1 или что-то в этом роде. Связь задается самим файлом данных. Таким образом, чтобы быть более конкретным у меня есть файл, который выглядит примерно так:Gnuplot: ось графика x2 относительно оси x1

V  T  P 
2.0 15.0 0.586 
3.0 17.4 0.798 
4.0 25.3 1.023 
5.0 28.9 1.124 
6.0 30.2 1.456 

Я хотел бы сделать участок Т относительно (ВПР) P по осям X1Y1 и имеют Т-WRT V на x2y1 оси. Таким образом, ось x1 отобразит диапазон P, а x2 отобразит диапазон V в соответствующих местах x1, то есть 0.586 на оси x1 будет иметь 2.0 на оси x2 в одном и том же месте. Возможно ли это в Gnuplot или мне нужно иметь отношение к двум осям x, чтобы это сделать? Любая помощь будет принята с благодарностью. Заранее спасибо.

ответ

13

Вот как вы можете это достичь. Я покажу вам первый сценарий и результат, а затем объяснить шаги:

reset 
set xtics nomirror 
set x2tics 
set autoscale xfix 
set autoscale x2fix 
set xlabel 'P' 
set ylabel 'T' 
set x2label 'V' 
plot 'data.txt' using 3:2 with linespoints ps 2 lw 2 title 'T wrt P', \ 
    '' using 3:2:x2tic(1) axes x2y1 with points ps 2 lw 2 title 'T wrt V' 

enter image description here

Я первый участок T WRT P на x1y1. После этого я сюжет T WRT V на x2y1 и использовать для этого диапазона и тик позиций P, но использовать значения V как крестики этикетки для оси х2. Это дает линейную шкалу для P и приспосабливает V соответственно.

Для этого необходимо использовать set autoscale xfix и set autoscale x2fix. Это использует точные диапазоны и не расширяет ось до следующих основных тиков, которые будут выполняться только для оси x, но не для оси x2, которая имеет пользовательские тики.

Можно, конечно, также обратный процесс и использовать линейную шкалу для V и адаптировать P тики. В любом случае для пользовательских тиков, которые размещаются с xtic() или x2tic, номера используются так же, как они отформатированы в файле данных.

reset 
set xtics nomirror 
set x2tics 1 
set autoscale xfix 
set autoscale x2fix 
set xlabel 'P' 
set ylabel 'T' 
set x2label 'V' 
plot 'data.txt' using 1:2:xtic(3) with linespoints ps 2 lw 2 title 'T wrt P', \ 
    '' using 1:2 axes x2y1 with points ps 2 lw 2 title 'T wrt V' 

enter image description here

Здесь точки показаны для обеих сюжетных линий, чтобы показать, что они действительно совпадают.

Для того, чтобы одна команда генерировала только xtics, можно использовать NaN для y -значения. И если только некоторые из пользовательских тиков должны быть ярлыками, нужна соответствующая проверка в вызове x2tic. Здесь я поставил метки только для всех четных строк $0 является текущий номер строки, начиная с 0):

reset 
set xtics nomirror 
set x2tics 
set autoscale xfix 
set autoscale x2fix 
set xlabel 'P' 
set ylabel 'T' 
set x2label 'V' 
plot 'data.txt' using 3:2 with linespoints ps 2 lw 2 title 'T wrt P', \ 
    '' using 3:(NaN):x2tic((int($0) % 2) ? '' : stringcolumn(1)) axes x2y1 t '' 

С результатом:

enter image description here

+0

Спасибо Кристофа, это именно то, что я необходимо.У меня было ощущение, что это будет нечто простое, как добавление другой вещи в «использование 3: 2», но я не думал использовать x2tic. Я пробовал гораздо более сложные способы. У меня есть два других связанных вопроса, если у вас есть момент. Есть ли способ не отображать каждый символ на оси x2? Я пробовал основные «x2tics 2,2» и «x2tics (2, 4, 6)», но ни один из них не влияет на тиковые метки. Также можно добавить тики, но не точки (кроме того, чтобы заголовок для второго фрагмента был пустым и использовал тот же стиль для обоих графиков)? – falconskull

+0

@falconskull Использование 'set x2tics ...' не работает, потому что у вас есть пользовательские метки. См. Последний пример в редактировании, как это сделать. – Christoph

+0

Дорогой @ Кристоф действительно хороший ответ. Это то, что мне нужно с давних пор. Я попытался применить метод к моему сюжету, но я не могу сделать так хорошо, как хочу. Это мой результат: [link] (http://s1.postimg.org/qcm1kdvbj/Screenshot_from_2015_06_22_19_23_40.png) У меня есть два вопроса, если вы хотите мне помочь (извините, что разместите их здесь). Я пробовал условие для печати конкретных ярлыков, но для меня это недостаточно. Я могу указать ярлыки вручную? А другой - могу ли я указать, сколько x2tics я заработал? (в моем заговоре слишком много) Большое спасибо! – Nikko

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