Test CGraphic - domande e suggerimenti - pagina 8

 
Vladimir Karputov:

E subito un desiderio: posso fare un font inclinato (angolato) per entrambi gli assi contemporaneamente (my_graphic.FontSet("Arial",10,0,180);). Non è possibile fare questo metodo di impostazione del carattere (o dell'angolo) per un asse separato?

Per cambiare la pendenza del carattere dell'asse si dovrebbero aggiungere tre nuovi campi e sei nuovi metodi alla classe CAxis per mantenerli, e al momento sembra già un po' sovraccarica. Quindi non posso dire se tale funzionalità sarà aggiunta o meno. Nel tuo caso, posso consigliare di implementare il discendente CGraphics e sovrascrivere il metodo CreateAxes in esso (riscrivere letteralmente due righe).

 

Potreste dirmi come aggiungere del testo a un grafico scientifico? Non importa come ho provato, non ha funzionato. Ecco il codice leggermente modificato dall'esempio:

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


In generale, grazie mille che ci sono "numerosi" esempi suCGraphic!!!

Bisogna passare molto tempo su alcune piccole cose, fino a sputare e imprecare e mandare tutto al diavolo...

 
Dennis Kirichenko:

In realtà, grazie mille per i "numerosi" esempi su CGraphic!!!

Ma ci sono esempi, per esempio https://www.mql5.com/ru/articles/2866 e 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.
 

Pochi. E non ci ho trovato TextAdd() o LineAdd().

 
Dennis Kirichenko:

Pochi. E non vi ho trovato né TextAdd() né LineAdd().

Buon pomeriggio, la soluzione al suo problema si trova in queste righe:

Tra le capacità aggiuntive della libreria Graphics dovremmo anche menzionare i metodi che permettono di aggiungere nuovi elementi al grafico:

  1. TextAdd()- aggiunge del testo in un punto arbitrario del grafico, le coordinate devono essere impostate in scala reale. Usate il metodo FontSet per mettere a punto il testo visualizzato.
  2. LineAdd() - aggiunge una linea in un punto arbitrario del grafico, le coordinate devono essere impostate in scala reale.
  3. MarksToAxisAdd() - aggiunge nuovi segni sull'asse di coordinate specificato.
È importante notare che i dati sull'aggiunta di questi elementi non sono memorizzati da nessuna parte, quindi, dopo aver disegnato una nuova curva sul grafico o averlo ridisegnato, saranno tutti sovrascritti.

Chiamate il metodo graphic.CurvePlotAll() per sovrascrivere il testo che volevate disegnare. Il modo corretto di farlo è il seguente:

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

Risultato:

 

Roman Konopelko, grazie mille!

Sì, penso che tali peculiarità del lavoro con la grafica dovrebbero essere specificate nella documentazione.

 

La domanda per gli intenditori è questa. C'è un grafico a tick basato su una CGraphic scientifica.


Ne ha bisogno:

1) Rientro come nel grafico in MT. In modo che gli ultimi valori non siano adiacenti al bordo destro del grafico;

2) Visualizzare la scala Y a destra invece che a sinistra.

Non ho trovato tali caratteristiche nei metodi...

 

Dennis Kirichenko:

È necessario quanto segue:

1) Rientro come nel grafico MT. In modo che gli ultimi valori non siano adiacenti al bordo destro del grafico;

//+------------------------------------------------------------------+
//| 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 esempio di ciò che appare:



 

Dennis Kirichenko:

Bisogno:

...

2) Visualizzare la scala Y a destra invece che a sinistra.

Non c'è una tale opzione. Sarebbe bello se fosse possibile non solo mettere la scala a destra, ma anche visualizzare due scale indipendenti (principale e ausiliaria), come si può fare, per esempio, in Excel:


 

Anatoly, grazie mille! Mi ha aiutato nel punto 1. Sì, ho perso il metodo dell'asseCAxis::MaxGrace(const double value).