Prüfung von CGraphic - Fragen und Anregungen - Seite 8

 
Vladimir Karputov:

Und gleich noch ein Wunsch: Ich kann für beide Achsen gleichzeitig eine schräge (abgewinkelte) Schrift erstellen (my_graphic.FontSet("Arial",10,0,180);). Können wir diese Methode zur Einstellung der Schriftart (oder des Winkels) nicht für eine separate Achse verwenden?

Guten Tag, um die Neigung der Achsenschriftart zu ändern, müssten Sie der Klasse CAxis drei neue Felder und sechs neue Methoden hinzufügen, um sie zu pflegen, und im Moment sieht sie schon etwas überladen aus. Ich kann also nicht sagen, ob eine solche Funktion hinzugefügt wird oder nicht. In Ihrem Fall kann ich raten, CGraphics Nachkomme zu implementieren und überschreiben CreateAxes-Methode in es (umschreiben buchstäblich zwei Zeilen).

 

Können Sie mir bitte sagen, wie ich einem wissenschaftlichen Diagramm Text hinzufügen kann? Egal, wie ich es versuchte, es funktionierte nicht. Hier ist der leicht veränderte Code aus dem Beispiel:

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


Generell vielen Dank, dass es "zahlreiche" Beispiele aufCGraphic gibt!!!

Man muss viel Zeit auf einige kleine Dinge verwenden, bis man spuckt und flucht und alles zum Teufel jagt...

 
Dennis Kirichenko:

Eigentlich vielen Dank für die "zahlreichen" Beispiele auf CGraphic!!!

Aber es gibt Beispiele, zum Beispiel https://www.mql5.com/ru/articles/2866 und 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.
 
Rashid Umarov:
Aber es gibt Beispiele, z.B. https://www.mql5.com/ru/articles/2866 und https://www.mql5.com/ru/docs/stand ardlibrary/mathematics/stat

Wenige. Und ich habe dort weder TextAdd() noch LineAdd() gefunden.

 
Dennis Kirichenko:

Wenige. Und ich habe dort weder TextAdd() noch LineAdd() gefunden.

Guten Tag, die Lösung für Ihr Problem liegt in diesen Zeilen:

Zu den zusätzlichen Möglichkeiten der Grafikbibliothek gehören auch Methoden, mit denen Sie dem Diagramm neue Elemente hinzufügen können:

  1. TextAdd()- fügt Text an einer beliebigen Stelle des Diagramms ein, die Koordinaten müssen auf einen realen Maßstab eingestellt sein. Verwenden Sie die Methode FontSet zur Feinabstimmung des angezeigten Textes.
  2. LineAdd() - fügt eine Linie an einer beliebigen Stelle des Diagramms ein, die Koordinaten müssen auf einen realen Maßstab eingestellt sein.
  3. MarksToAxisAdd() - fügt neue Markierungen auf der angegebenen Koordinatenachse hinzu.
Es ist wichtig zu beachten, dass die Daten zum Hinzufügen dieser Elemente nirgendwo gespeichert werden, daher werden sie nach dem Zeichnen einer neuen Kurve auf dem Diagramm oder dem erneuten Zeichnen alle überschrieben.

Sie rufen die Methode graphic.CurvePlotAll() auf, um den Text, den Sie zeichnen wollten, zu überschreiben. Die korrekte Vorgehensweise ist wie folgt:

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

Ergebnis:

 

Roman Konopelko, herzlichen Dank!

Ja, ich denke, solche Besonderheiten bei der Arbeit mit Grafiken sollten in der Dokumentation aufgeführt werden.

 

Die Frage für Kenner ist folgende. Es gibt ein Tickchart, das auf einer wissenschaftlichen CGraphik basiert.


Es braucht:

1) Einrücken wie in der Grafik in MT. Damit die letzten Werte nicht an den rechten Rand des Diagramms stoßen;

2) Zeigen Sie die Y-Skala auf der rechten Seite statt auf der linken Seite an.

Ich konnte solche Funktionen in den Methoden nicht finden...

 

Dennis Kirichenko:

Folgendes wird benötigt:

1) Einrücken wie in der MT-Grafik. Damit die letzten Werte nicht an den rechten Rand des Diagramms stoßen;

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

//---

Ein Beispiel dafür, wie dies aussehen kann:



 

Dennis Kirichenko:

Bedarf:

...

2) Zeigen Sie die Y-Skala auf der rechten Seite statt auf der linken Seite an.

Es gibt keine solche Möglichkeit. Es wäre schön, wenn es möglich wäre, nicht nur die Skala auf der rechten Seite zu platzieren, sondern auch zwei unabhängige Skalen (Haupt- und Hilfsskala) anzuzeigen, wie es z. B. in Excel möglich ist:


 

Anatoly, ich danke dir sehr! Das hat bei Punkt 1 geholfen. Ja, ich habe dieAchsenmethode CAxis::MaxGrace(const double value) übersehen.