2013-10-25 4 views
2

gnuplot을 사용하여 FreeFEM ++로 얻은 데이터를 플롯하려고합니다. 나는 다음과 같은 코드로 데이터를 저장 한 FreeFEM에서GNUPLOT에 FreeFEM ++ 데이터 플로팅

:

{ ofstream ff("sol.dat"); 
    for (int i=0;i<Th.nt;i++){ 
      for (int j=0; j<3; j++){ 
        ff<<Th[i][j].x << "\t" << Th[i][j].y << "\t" << u[][Vh(i,j)] << endl; 
      } 
      ff<<Th[i][0].x << "\t" << Th[i][0].y << "\t" << u[][Vh(i,0)] << "\n\n\n"; 
    } 

} 데이터의 첫 번째 라인의

샘플은 다음과 같습니다

0.635787 -0.0440338 0.0056924 
0.65234 -0.063181 0.00797757 
0.655369 -0.0412323 0.00795786 
0.635787 -0.0440338 0.0056924 


0.597634 -0.0376 3.06323e-33 
0.613904 -0.0585366 0.0030425 
0.616879 -0.0388107 0.0030295 
0.597634 -0.0376 3.06323e-33 

경우 어떤 이유있는 각 팩에 두 번 반복되는 데이터 포인트가 있는지 모르겠습니다. 그러나 이것이 그들이 FreeFem 설명서에서 당신에게 그렇게 말하는 방법입니다. 분명히 GNUPLOT은 어떤 이유로 '데이터 팩'사이에 공백이 필요합니다.

나는의 gnuplot 스크립트를 사용하여 데이터를 플롯하기 위해 노력하고있어 : 그것은 좋은 플롯하지만 pm3d는 아무것도 아니라고 생각

set pm3d at b 
set palette rgbformulae 30,31,32 
set hidden3d 
splot "sol.dat" with lines palette 

. 나는 pm3d가 음모의 바닥에 열 강도의 색깔 패턴을 포함시킬 것이라고 생각했습니다. 또한 솔리드 컬러로 채우는 방법을 줄거리 사이의 틈새로 찾지 못합니다.

OUTPUT SAMPLE

감사합니다.

+1

pm3d, hidden3d, lines palette 등 여러 가지를 섞어서 사용하고 싶습니다. 멋진 그림을 원하는 것처럼 보입니다 ... pm3d를 사용하려면 * one * 행으로 두 개의 데이터 블록을 구분해야합니다. 올바른 구문은'set pm3d at b '입니다. 'pm3d'는 4 개의 점을 사용하여 하나의 색상으로 하나의 사각형을 만들기 때문에 한 점을 두 번 더 추가해야합니다. '4x4' 행렬은'3x3' 색 사각형으로 나타납니다. 말로, 당신의 줄거리가 어떻게 보일 것인가 (줄을 어떻게 표시 할 것인가, 어떻게 표면을?, pm3d 만 기지에 숨길 것 등)을 설명해 주시겠습니까? 가지고 계시다시피, 옵션은 함께 맞지 않습니다. – Christoph

+0

@Christoph, 고마워. 나는 오타를 수정하고 내가 원하는 것을 더 잘 설명하고 내가 얻은 것을 이미지로 포함시켰다. 해당 명령이 호환되지 않는다는 것을 알지 못했습니다. –

답변

1

이에 응답하여 데이터를 구성하는 제 상이한 가능성의 적절한 설명을 필요

  1. 빈 행은 두 개의 다른 데이터 세트를 분리한다. 이들은 전혀 연결되어 있지 않으며, 그 사이에 선이 그려지지 않습니다. 귀하의 경우에 이것은 이 단일 서피스에 대한 그리드의 종류를 지원하지 않기 때문에 필수입니다.

  2. pm3d은 단일 데이터 세트 내에서만 작동하며 일반 그리드가 필요합니다 (pm3d demos 참조). 단일 서피스의 두 라인 (isolines)은 하나만 빈 행으로 구분해야합니다.

그래도 pm3d은 처리 할 수없는 불규칙한 눈금이 있습니다. gnuplot 안에 dgrid3d을 사용하여 입력 데이터를 다시 샘플링하여 일반 그리드를 얻고 그 중 하나를 pm3d으로 플롯 할 수 있습니다.

그러나 dgrid3dsplot 명령의 모든 데이터 파일에 영향을줍니다. 따라서 두 개의 splot 명령을 사용하려면 multiplot이 필요합니다.

는 다음 스크립트는이 단지 인이 일할 수있는 방법을 보여줍니다하지만 많은 데이터 dgrid3d 대처가을 설정 어떻게 설정 전체 데이터가 없어 알 수 없기 때문에 (위의 1. 참조) 매우 거친 가이드 :

set multiplot 

set pm3d at b 
set dgrid3d 200,200 
unset key 
splot 'sol.dat' nosurface 

unset dgrid3d 
unset pm3d 
splot 'sol.dat' with lines palette 

unset multiplot 

작동합니다,하지만 당신은 아마 조정에 ​​dgrid3d 전화를해야합니다. 또한 몇 가지 다른 개선 사항이 필요할 수 있습니다 (국경, 틱 및 컬러 박스를 한 번만 플로팅하는 등).)

+0

감사합니다! 잘 했어. –