2016-12-27 1 views
0

그래서 날짜에 따라 막대 그래프를 만들 필요가 있지만 xticlabel 겹치는 문제가 있습니다. 중복을 피하기 위해 xtics를 건너 뛰는 방법을 찾으려고합니다. 대신 두 번째 열에Gnuplot, timedat tics 건너 뛰기, 히스토그램

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 계산하는 것입니다 .DAT 파일 만 표시 값 : 내가하려고했던 날짜 정수 틱이없는 점을 감안하면 그런 식으로 해결하기 위해 처음에 값이 있습니까?

내 코드 :

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 조작은 상자에서 작동하지만 모든 열에서 모든 상자를 ovelapping하고 싶습니다. 그래서 내가 원하지 않는 것입니다. 그래서 상자가 아니라 막대 그래프가 필요합니다. – 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 번째 xticlabel을 건너 뛸 수도 있습니다. 이 시점에서 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

관련 문제