CGraphic 테스트 - 질문 및 제안 - 페이지 8

 
Vladimir Karputov :

그리고 즉시 소원: 두 축(my_graphic.FontSet("Arial",10,0,180);)에 대해 즉시 비스듬한 글꼴을 만들 수 있습니다(my_graphic.FontSet("Arial",10,0,180);). 별도의 축에 대해 글꼴(또는 각도)을 설정하는 이러한 방법을 만들 수 있습니까?

안녕하세요! 축의 기울기를 변경하려면 CAxis 클래스에 3개의 새 필드와 6개의 새 메서드를 추가하여 이를 제공해야 하며 현재로서는 이미 약간 오버로드된 것처럼 보입니다. 따라서 이러한 기능이 추가될지 여부는 장담할 수 없습니다. 귀하의 경우 CGraphics 의 후계자를 구현하고 그 안에 있는 CreateAxes 메서드를 재정의하도록 조언할 수 있습니다(문자 그대로 두 줄 다시 작성).

 

과학 그래프에 텍스트 를 추가하는 방법을 알려주세요. 아무리 애를 써도 소용없었다. 다음은 예제에서 약간 수정된 코드입니다.

 void OnStart ()
  {
   CGraphic graphic;
   graphic.Create( 0 , "Graphic" , 0 , 30 , 30 , 780 , 380 );
   double x[]={- 10 ,- 4 ,- 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
   double y[]={- 5 , 4 ,- 10 , 23 , 17 , 18 ,- 9 , 13 , 17 , 4 };
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);
   curve.Name( "Example" );
   graphic.XAxis().Name( "X - axis" );
   graphic.XAxis().NameSize( 12 );
   graphic.YAxis().Name( "Y - axis" );
   graphic.YAxis().NameSize( 12 );
   graphic.YAxis().ValuesWidth( 15 );
//--- текст
   int txt_x= 2 ;
   int txt_y= 4 ;
   graphic.FontSet( "Arial" , 10 );
   graphic.TextAdd(txt_x,txt_y, "Testing" , ColorToARGB ( clrGreen ));
//--- перерисовка
   graphic.CurvePlotAll();
   graphic.Update();
   DebugBreak ();
  }


일반적으로 CGraphic 에 "수많은" 예제가 있다는 사실에 감사드립니다!!!

뱉고 욕하고 모든걸 지옥에 던질때까지 소소한것들에 많은 시간을 보내야하는데...

 
Dennis Kirichenko :

일반적으로 CGraphic에 "수많은" 예제가 있다는 사실에 감사드립니다!!!

그러나 https://www.mql5.com/ru/articles/2866https://www.mql5.com/ru/docs/standardlibrary/mathematics/stat 와 같은 예가 있습니다.
Визуализируй это! Графическая библиотека в MQL5 как аналог plot из R
Визуализируй это! Графическая библиотека в MQL5 как аналог plot из R
  • 2017.02.07
  • MetaQuotes Software Corp.
  • www.mql5.com
При исследовании и изучении закономерностей важную роль играет визуальное отображение с помощью графиков. В популярных среди научного сообщества языках программирования, таких как R и Python, для визуализации предназначена специальная функция plot. С её помощью можно рисовать линии, точечные распределения и гистограммы для наглядного представления закономерностей. В MQL5 вы можете делать всё то же самое с помощью класса CGraphics.
 

약간의. 그리고 거기에서 TextAdd() 또는 LineAdd()를 찾지 못했습니다.

 
Dennis Kirichenko :

약간의. 그리고 거기에서 TextAdd() 또는 LineAdd()를 찾지 못했습니다.

안녕하세요! 문제에 대한 해결책은 다음과 같습니다.

또한 그래픽 라이브러리의 추가 기능 중에서 차트에 새 요소를 추가할 수 있는 방법에 유의해야 합니다.

  1. TextAdd() - 차트의 임의의 위치에 텍스트를 추가합니다. 좌표는 실시간으로 설정되어야 합니다. 표시된 텍스트를 미세 조정하려면 FontSet 메서드를 사용하십시오.
  2. LineAdd() - 차트의 임의의 위치에 선을 추가합니다. 좌표는 실시간으로 설정되어야 합니다.
  3. MarksToAxisAdd() - 지정된 좌표 축에 새 마크를 추가합니다.
이러한 요소를 추가할 때의 데이터는 어디에도 저장되지 않으므로 차트에 새 곡선을 그리거나 다시 그린 후에는 모두 덮어쓰게 된다는 점에 유의해야 합니다.

Graphic.CurvePlotAll() 메서드를 호출하여 그리려는 텍스트를 덮어씁니다. 다음과 같이 정확할 것입니다.

 void OnStart ()
  {
   CGraphic graphic;
   graphic.Create( 0 , "Graphic" , 0 , 30 , 30 , 780 , 380 );
   double x[]={- 10 ,- 4 ,- 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
   double y[]={- 5 , 4 ,- 10 , 23 , 17 , 18 ,- 9 , 13 , 17 , 4 };
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);
   curve.Name( "Example" );
   graphic.XAxis().Name( "X - axis" );
   graphic.XAxis().NameSize( 12 );
   graphic.YAxis().Name( "Y - axis" );
   graphic.YAxis().NameSize( 12 );
   graphic.YAxis().ValuesWidth( 15 );
//--- текст
   int txt_x= 2 ;
   int txt_y= 4 ;
//--- перерисовка
   graphic.CurvePlotAll();
   graphic.FontSet( "Arial" , 10 );
   graphic.TextAdd(txt_x,txt_y, "Testing" , ColorToARGB ( clrGreen ));
   graphic.Update();
   DebugBreak ();
  }

결과:

 

Roman Konopelko , 대단히 감사합니다!

흠, IMHO, 그래픽 작업의 이러한 기능은 문서에 표시되어야 합니다.

 

전문가를 위한 질문입니다. 과학적 CGraphic 을 기반으로 한 눈금 차트가 있습니다.


필요:

1) MT의 차트와 같이 들여쓰기를 합니다. 마지막 값이 그래프의 오른쪽 테두리에 인접하지 않도록

2) 왼쪽 대신 오른쪽에 Y 스케일을 표시합니다.

나는 그런 가능성을 찾지 못했습니다 ...

 

Dennis Kirichenko :

필요:

1) MT의 차트와 같이 들여쓰기를 합니다. 마지막 값이 그래프의 오른쪽 테두리에 인접하지 않도록

 //+------------------------------------------------------------------+
//| Class CAxis                                                      |
//| Usage: class for create axes on a two-dimensional graphics       |
//+------------------------------------------------------------------+
class CAxis
  {
private :
...
   double             m_min_grace;       // "grace" value applied to the minimum data range
   double             m_max_grace;       // "grace" value applied to the maximum data range

public :
                     CAxis( void );
                    ~CAxis( void );
...
   double             MaxGrace( void )                     const { return (m_max_grace);      }
   void               MaxGrace( const double value )             { m_max_grace= value ;        }
...
  };

//---

어떻게 생겼는지의 예:



 

Dennis Kirichenko :

필요:

...

2) 왼쪽 대신 오른쪽에 Y 스케일을 표시합니다.

그러나 그러한 가능성은 없습니다. 예를 들어 Excel에서와 같이 오른쪽에 눈금을 배치할 수 있을 뿐만 아니라 두 개의 독립적인 눈금(주 및 보조)을 표시할 수 있다면 좋을 것입니다.


 

아나톨리, 대단히 감사합니다! 항목 1에 따라 도움을 받았습니다. 예, 축 메서드 CAxis::MaxGrace(const double value) 를 놓쳤습니다.