2016-12-27 5 views
0

Итак, мне нужно сделать гистограмму данных по датам, но у меня проблема с перекрытием xticlabel, поэтому я пытаюсь найти решение, как пропустить xtics, чтобы избежать дублирования. Учитывая, что сроки не являются целыми тиков, я пытался решить это таким образом:Gnuplot, пропуская timedat tics, гистограмма

файл .dat

Time Dat 1 Dat 2 
1 27-12-2016 12 2 
2 28-12-2016 13 7 
3 29-12-2016 17 2 
4 30-12-2016 9 10 
.... 

Можно ли рассчитывать xtic по первому столбцу, но показать значения во втором столбце вместо значения вначале?

мой код:

reset 
dx=5. 
n=2 
total_box_width_relative=0.75 
gap_width_relative=0.1 
d_width=(gap_width_relative+total_box_width_relative)*dx/2. 
d_box = total_box_width_relative/n 
reset 

set term png truecolor font "arial,10" fontscale 1.0 size 800,400 
set output "test.png" 
set datafile separator "\\t" 
set title "Errors" 
set print "-" 
set xlabel 'x' offset "0", "-1" 
set ylabel 'y' offset "1", "-0" 
set key invert reverse Left outside 
set key autotitle columnheader 
set key samplen 4 spacing 1 width 0 height 0 
set autoscale yfixmax 
set yrange [0: ] 
set xtics strftime('%d-%m-%Y', "27-12-2016"), 5, strftime('%m-%d-%Y', "15-01-2017") 
set xtics font ", 7" 
set ytics auto font ", 9" 
set y2tics auto font ", 9" 
set grid 
set style data histogram 
set style histogram cluster gap 1 
set style fill transparent solid 0.75 noborder 
set boxwidth 0.9 relative 
set xtic rotate by -45 scale 0 
plot 'datfile' u 3:xtic(strftime('%d-%m-%Y', strptime('%m.%d.%Y', stringcolumn(2)))), '' u 4 
+0

Не должно ли это быть редактировать свой файл другой вопрос? Как насчет просто 'plot 'datfile' u 3: xtic (1)'? И затем удалите все, что вам не нужно, что должно быть более половины всех строк. – Christoph

+0

@ Christoph http://s018.radikal.ru/i525/1612/4a/d98226528e84.png - вот с чем я сражаюсь. Я хочу пропустить некоторую xlabel с интервалом. И как это сделать? Timedat-манипуляция работает с ящиками, но, тем не менее, я хочу, чтобы каждый ящик с каждого столбца, и это то, чего я не хочу, поэтому мне нужна гистограмма, а не коробки. – genesi5

+0

@Christoph BTW Я использую его с perl для инкапсуляции переменных в список скриптов и немного манипулировать, но он решает только часть проблем с gnuplot. – genesi5

ответ

2

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

После удаления всех ненужных вещей и фиксации команды участок, вот что я в конечном итоге с:

reset 
set datafile separator "\t" 
set yrange [0:*] 
set style fill transparent solid 0.75 noborder 
set boxwidth 0.9 relative 
set xtic rotate by -45 scale 0 
set key autotitle columnheader 

set style data histogram 
set style histogram cluster gap 1 

plot 'file.dat' using 3:xtic(2) t col(2), '' using 4 

enter image description here

Здесь вы уже видите один вариант, чтобы избежать дублирования больше тиковых этикеток на вращая их.

Другая возможность - пропустить каждую n-ю буквую букву. На этом этапе вы должны понять, как gnuplot создает гистограммы. Гистограммы не используют обычную числовую ось, поэтому вы не можете просто использовать даты, как обычно, при построении линий. Но gnuplot помещает каждый барный кластер в целое x-положение и, например, xtic(2) вы маркируете каждый кластер строкой, как указано во втором столбце.

Выражение xtic(2) является сокращением на xticlabel(2), что означает xticlabel(stringcolumn(2)). Вместо того, чтобы точно использовать строку во втором столбце, вы можете использовать здесь любое выражение, которое дает строку, включая условия. Чтобы только сюжет каждый второй проверки, если этикетка номер строки четный или нечетный int($0) % 2 == 0 и использования и пустая строка или строка из второго столбца:

plot 'file.dat' using 3:xtic(int($0)%2 == 0 ? stringcolumn(2) : '') t col(2), '' u 4 

enter image description here

+0

СПАСИБО, ты спас мне нервы. Я долго сражался. – genesi5

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