Test de CGraphic - questions et suggestions - page 8

 
Vladimir Karputov:

Et tout de suite un souhait : je peux faire une police inclinée (angulaire) pour les deux axes à la fois (my_graphic.FontSet("Arial",10,0,180) ;). Ne pouvons-nous pas faire de cette méthode de réglage de la police (ou de l'angle) un axe distinct ?

Bonjour ! Pour modifier la pente de la police de l'axe, il faudrait ajouter trois nouveaux champs et six nouvelles méthodes à la classe CAxis pour les gérer, et elle semble déjà un peu surchargée pour le moment. Je ne peux donc pas dire si cette fonctionnalité sera ajoutée ou non. Dans votre cas, je peux vous conseiller d'implémenter le descendant CGraphics et d'y surcharger la méthode CreateAxes (réécriture de deux lignes).

 

Pourriez-vous me dire comment ajouter du texte à un graphique scientifique ? Peu importe comment j'ai essayé, ça n'a pas marché. Voici le code légèrement modifié de l'exemple :

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();
  }


En général, merci beaucoup qu'il y ait de "nombreux" exemples surCGraphic! !!

Il faut passer beaucoup de temps sur des petites choses, jusqu'à ce qu'on crache et jure et qu'on jette tout en l'air...

 
Dennis Kirichenko:

En fait, merci beaucoup pour les "nombreux" exemples sur CGraphic ! !!

Mais il existe des exemples, par exemple https://www.mql5.com/ru/articles/2866 et https://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.
 

Peu. Et je n'y ai pas trouvé TextAdd() ou LineAdd().

 
Dennis Kirichenko:

Peu. Et je n'y ai trouvé ni TextAdd() ni LineAdd().

Bonjour, la solution à votre problème se trouve dans ces lignes :

Parmi les capacités supplémentaires de la bibliothèque graphique, il convient également de mentionner les méthodes qui permettent d'ajouter de nouveaux éléments au graphique :

  1. TextAdd()- ajoute du texte à un endroit arbitraire du graphique, les coordonnées doivent être définies à l'échelle réelle. Utilisez la méthode FontSet pour affiner le texte affiché.
  2. LineAdd() - ajoute une ligne à un endroit arbitraire du graphique, les coordonnées doivent être définies à l'échelle réelle.
  3. MarksToAxisAdd() - ajoute de nouvelles marques sur l'axe de coordonnées spécifié.
Il est important de noter que les données relatives à l'ajout de ces éléments ne sont stockées nulle part. Par conséquent, après avoir dessiné une nouvelle courbe sur le graphique ou après l'avoir redessiné, elles seront toutes écrasées.

Vous appelez la méthode graphic.CurvePlotAll() pour écraser le texte que vous vouliez dessiner. La manière correcte de procéder est la suivante :

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();
  }

Résultat :

 

Roman Konopelko, merci beaucoup !

Oui, je pense que de telles particularités du travail avec les graphiques devraient être spécifiées dans la documentation.

 

La question qui se pose aux connaisseurs est la suivante. Il existe un graphique en tic-tac basé sur un CGraphique scientifique.


Il en a besoin :

1) Indenter comme sur le graphique dans MT. Pour que les dernières valeurs ne soient pas adjacentes au bord droit du graphique ;

2) Afficher l'échelle Y à droite plutôt qu'à gauche.

Je n'ai pas trouvé de telles fonctionnalités dans les méthodes...

 

Dennis Kirichenko:

Les éléments suivants sont nécessaires :

1) Indentation comme dans le graphique MT. Pour que les dernières valeurs ne soient pas adjacentes au bord droit du graphique ;

//+------------------------------------------------------------------+
//| 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;        }
...
  };

//---

Un exemple de ce à quoi cela ressemble :



 

Dennis Kirichenko:

Besoin :

...

2) Afficher l'échelle Y à droite au lieu de la gauche.

Cette option n'existe pas. Il serait bien qu'il soit possible non seulement de placer l'échelle à droite, mais aussi d'afficher deux échelles indépendantes (principale et auxiliaire), comme on peut le faire, par exemple, dans Excel :


 

Anatoly, merci beaucoup ! Il a aidé au point 1. Oui, j'ai manqué la méthode d'axeCAxis::MaxGrace(const double value).

Raison: