2017-11-15 2 views
1

일부 매트릭스 파일을 히트 맵으로 그리기 위해 gnuplot을 사용하고 있습니다. 이러한 행렬은 가로 (행렬의 높이가 너비보다 작음) 또는 세로 (행렬의 높이가 너비보다 큼) 일 수 있습니다.Gnuplot : 컬러 박스의 고정 너비 설정

색상 상자를 제외한 모든 것이 정상적으로 작동합니다. set size ratio -1을 설정하여 가로 세로 비율이 1 : 1 인 사각형으로 히트 맵을 얻습니다. 이 명령은 그래프를 늘리거나 줄입니다. 그러나 또한 색상 상자를 늘리거나 줄입니다. 내 매트릭스 파일 중 일부가 매우 작은 폭을 가지고 있기 때문에

내 색 상자을 고정 폭을 가지고 싶습니다 - 이것은 매우 얇은 색상 상자가 발생합니다. 내 colorbox의 너비를 수동으로 설정하려고했습니다. 그러나 원산지와 크기를 수동으로 설정하지 않으면 불가능합니다.

가로

:

unset key 
set cbrange [0:5] 
set xrange [0:10] 
set yrange [0:5] 
set size ratio -1 
set cbtics out nomirror 
$map1 << EOD 
5 4 3 1 0 5 4 3 1 0 
2 2 0 0 1 2 2 0 0 1 
0 0 0 1 0 0 0 0 1 0 
0 0 0 2 3 0 0 0 2 3 
0 1 2 4 3 2 2 0 0 1 
EOD 
plot '$map1' using ($1+.5):($2+.5):($3) matrix with image 

enter image description here

세로 :

unset key 
set cbrange [0:5] 
set xrange [0:5] 
set yrange [0:10] 
set size ratio -1 
set cbtics out nomirror 
$map1 << EOD 
5 4 3 1 0 
2 2 0 0 1 
0 0 0 1 0 
0 0 0 2 3 
0 1 2 4 3 
5 4 3 1 0 
2 2 0 0 1 
0 0 0 1 0 
0 0 0 2 3 
2 2 0 0 1 
EOD 
plot '$map1' using ($1+.5):($2+.5):($3) matrix with image 

enter image description here

012,351,
+1

이 모두 기원과 전체 크기를 지정할 수 있습니다 당신은 그 값을 가지고하면 당신은 colorbox의 기원 명령 부분을 수정할 수 있습니다? 예를 들어'set colorbox user origin graph 1.1, first 0 size first 1, graph 1'은 픽셀 중 하나만큼 넓고 전체 그래프만큼 높은 색상 상자를 만듭니다. 이 경우 색상 막대를위한 약간의 공간을 만들기 위해 오른쪽 여백을 설정해야 할 수도 있습니다. – user8153

+0

감사합니다 @ user8153! 당신은 저를 도왔습니다!'set colorbox user origin graph 1, graph 0 size cbwidth, graph 1'을'set rmargin in screen 0.875'와 함께 사용하기로 결정했습니다. 'cbwith'는 정적 인 폭으로 가변적입니다. 내일 나는 모든 세부 사항에 대한 완전한 대답을 줄 것이다. – rweisse

답변

1

@ user8153은 내 문제에 대한 멋진 솔루션을 제공했습니다. 그것은 주어진 예제에 대한 매력처럼 작동합니다. 그러나 나는 그의 명령을 조금 바꿔야했다. (- 우리는 나중에 해결됩니다 그래프 창 색상 상자 사이에 공간이없이)

# [...] 
cbwidth = 0.034 
rightmargin = 0.875 
set colorbox user origin graph 1, graph 0 size cbwidth, graph 1 
set rmargin at screen rightmargin 
# [...] 

이것은 옆에 colorbox와 그래프를 그릴 것입니다 : 그렇지 않으면 내 실제 입력 데이터와 함께 작동하지 않을 것입니다. colorboxs 너비는 출력 너비의 3.4 %입니다 (png 또는 pngcairo, svg 또는 eps 등의 용어를 사용할 때 ...).

나는 그래프와 컬러 박스 사이에 약간의 공간을 선호한다. 내 colorbox의 원점 (위치)은 graph 1, graph 0입니다. 이 위치는 그래프 창의 오른쪽 하단에 있습니다. 을 의미합니다. 이 창은 100 %입니다. 따라서 여분의 공간을 추가하려면이 비율을 늘려야합니다. @ user8153은 추가 공간 10 % = origin graph 1.1, graph 0을 추가하기로 결정했습니다. (그의 코멘트를 살펴보십시오. first 0graph 0으로 변경했습니다). 불행한 점은 100 %가 그래프 창 (캔버스 너비가 아닌 구멍 그림 이미지)을 참조하고 그래프 창의 너비가 행렬의 가로 세로 비율로 변경되기 때문에이 경우 정적 백분율을 설정할 수 없습니다. 따라서 그래프 창의 실제 너비에 따라 매번이 값을 조정해야합니다.

이 (작물이 공백을 잘라 버릴 꺼야이 경우 1200 × 1200에) 내가 640 × 480보다 높은 값을 수동으로 단말기의 크기를 설정하는 것이 좋습니다 것입니다 자동으로 수행하려면 :

set term pngcairo size 1200,1200 crop 

을 당신이 그 후 귀하의 colorbox의 x 위치를 자유롭게 계산하십시오. gnuplots /else을 사용하거나 다른 언어를 사용하십시오 (제 경우에는 타이프 스크립트입니다. 왜냐하면 노드를 통해 gnuplot을 호출하기 때문입니다).JS-의 gnuplot-래퍼 - 그러나 논리는) 동일합니다 : 물론

const size = 1200    // canvas size (width and height): 1200px 
const cbspace = 0.017;  // prefered space between colorbox and window: 20px/1200px 
const rmargin = 0.875;  // right margin next to the graphs window 
let graphWindowWidth: number; // real width of the graphs window 

if (matrixHeight > matrixWidth) { 
    graphWindowWidth = (matrixWidth/matrixHeight) * size; 
} else { 
    graphWindowWidth = size * rmargin; 
} 
let cbPosX = (cbspace * size + graphWidth)/graphWidth; 

당신은 xtics 및 ytics는, X 축과 Y 축 제목에 대한 레이블에 약간의 공간이 필요하다는 것을 잊지 말아야한다. 이들은 상위 알고리즘에 포함되지 않습니다. 어쩌면 누군가가 실제 그래프 창 너비를 얻는 방법에 대한 더 나은 해결책을 가지고 있을지도 모릅니다. set colorbox user origin graph 1, graph 0 size cbwidth, graph 1

에 :에서

: set colorbox user origin graph cbPosX, graph 0 size cbwidth, graph 1