2013-10-18 4 views
2

난의 gnuplot에서 다음 데이터가 착색 :의 gnuplot 중복 점을 드로잉하고

2012-09-18 0 2 12 
2012-03-15 1 4 5 
2012-12-18 24 8 11 
2012-09-18 2 8 11 
2012-03-15 16 5 5 
2011-12-06 5 2 3 
2012-12-18 3 12 8 
2012-09-18 4 4 8 
2012-03-29 11 6 2 
2011-12-06 9 7 3 
2012-12-18 6 7 8 
2012-09-18 4 3 8 
2012-02-09 27 2 1 
2012-12-18 2 1 8 
2012-09-18 6 14 8 

첫번째 컬럼; x (날짜)

두 번째 열; y

3 번째 열; 포인트 컬러

4 번째 열; 발생 수 (점 중복)

나는의 gnuplot 프로그램을 작성해야합니다 :

  1. 내 (x, y)에 점을 그립니다합니다.
  2. 세 번째 열 값 (어쩌면 50 가지 이상의 색)에 따라 각 포인트에 다른 색을 부여합니다.
  3. 네 번째 열이 0보다 크면 그 점은 복제되고 n 번 그려 져야하고 x, y에 무작위로 작은 여백을두고 포즈를 지정해야합니다. 예를 들어, (rand (x) -0.5, rand (y) -0.5).

다른 질문, gnuplot을 배우는 가장 빠르고 가장 빠른 방법은 무엇입니까?

답변

2

이는 다른 질문 drawing duplicated points in gnuplot with small margin에 대한 내 대답에 확장 될 것으로 예상되는 :

당신은 시간 데이터로 해석 첫 번째 열이 필요합니다. 이를 위해 당신이 포인트 색상을 설정하려면

set xdata time 
set timefmt '%Y-%m-%d' 

필요가 팔레트를 정의하고 팔레트의 값을 기준으로 포인트 색상을 설정 linecolor palette을 사용하는 것이 가장 좋습니다.

그래서, drawing duplicated points in gnuplot with small margin에서 설명을 사용하여 최종 스크립트입니다 : 당신이 마음에 있어야합니다

reset 
filename = 'data.dat' 

stats filename using 4 nooutput 

set xdata time 
set timefmt '%Y-%m-%d' 

set format x '%Y-%m' 

rand_x(x) = x + 60*60*24*7 * (rand(0) - 0.5) 
rand_y(y) = y + (rand(0) - 0.5) 

plot for [i=0:int(STATS_max)-1] filename \ 
    using (rand_x(timecolumn(1))):(i < $4 ? rand_y($2) : 1/0):3 pointtype 7 linecolor palette notitle 

몇 가지 다른 사항은 다음과 같습니다

  1. stats 호출, set xdata time 앞에 와야합니다 통계 때문에 시간 데이터로 작업하지 마십시오.
  2. using 문에서 시간 데이터로 계산할 때 timecolumn 함수를 사용해야합니다 (일반적인 경우 column 또는 $..과 반대). 그러면 시간이 타임 스탬프 (즉, 초)로 표시됩니다.
  3. 그 이유는 매우 다른 크기 조정 때문에 xy에 두 가지 다른 임의 함수가 필요하기 때문입니다. 여기서는 시간 축에서 1 주일의 '지터'(60*60*24*7 초)를 사용했습니다.

4.6.4과 결과는 다음과 같습니다

enter image description here

gnuplot 학습에 대한 귀하의 질문에 어떤 말 : 스스로 질문을 해결하고보다 구체적인 질문을 게시하는 시도를!gnuplot 데모를 통해 무엇이 가능한지 확인하고 어떤 기능이나 플로팅 스타일을 사용했는지, 문서에서 찾아 보는지, 어떤 옵션/설정이 제공되는지 확인하십시오. 데모를 가지고 놀고 데이터 세트 등에 적용 해보십시오. 결국에는 연습에 관한 모든 것 (12 년 동안 gnuplot을 사용해 왔습니다 ...).

+0

thx 많이, 당신은 정말 놀라워요, 당신은 나를 너무 많이 도왔습니다. 정말 감사드립니다 :) 당신이 나에게 말한 것을하기 위해 최선을 다할 것입니다. –

+0

위와 같이 썼던 것을 적용했고 매력처럼 작동했지만보기가 내 데이터에 맞지 않았습니다. 다음 두 명령을 추가했습니다. xrange [GPVAL_DATA_X_MIN : GPVAL_DATA_X_MAX] 집합 yrange [GPVAL_DATA_Y_MIN : GPVAL_DATA_Y_MAX] 하지만 작동하지 않습니다! 어떤 단서를 ? –

+0

이 변수는'plot' 명령 후에 만 ​​사용할 수 있습니다.'help gnuplot-defined'를보십시오. 그래서 당신은'set terminal push; 터미널을 알 수 없음을 설정; ... 음모 ...; 터미널 팝 설정; replot'을하거나,'set autoscale'과'set offset'에 대해서 읽습니다. – Christoph