CGraphic'i test etme - sorular ve öneriler - sayfa 8

 
Vladimir Karputov :

Ve hemen bir dilek: İki eksen için HEMEN eğik (açılı) bir yazı tipi yapabilirim (my_graphic.FontSet("Arial",10,0,180);). Ayrı bir eksen için yazı tipini (veya açısını) ayarlamak için böyle bir yöntem yapmak mümkün müdür?

Tünaydın! Eksenlerin eğimini değiştirmek için, onlara hizmet etmek için CAxis sınıfına üç yeni alan ve altı yeni yöntem eklemeniz gerekecek ve şu anda zaten biraz aşırı yüklenmiş görünüyor. Bu nedenle böyle bir işlevin eklenip eklenmeyeceğini söyleyemem. Sizin durumunuzda, CGraphics'ten bir halefi uygulamanızı ve içindeki CreateAxes yöntemini geçersiz kılmanızı tavsiye edebilirim (kelimenin tam anlamıyla iki satırı yeniden yazın).

 

Lütfen bana bilimsel bir grafiğe nasıl metin ekleneceğini söyleyin. Ne kadar uğraşsam da işe yaramadı. Örnekten biraz değiştirilmiş bir kod:

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


Genel olarak, CGraphic'te "sayısız" örnek olduğu için çok teşekkürler !!!

Tükürüp küfür edene, her şeyi cehenneme atana kadar bazı küçük şeyler için çok zaman harcamak zorundasın ...

 
Dennis Kirichenko :

Genel olarak, CGraphic'te "sayısız" örnek olduğu için çok teşekkürler!!!

Ancak örnekler var, örneğin https://www.mql5.com/ru/articles/2866 ve 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.
 

Bir kaç. Ve orada TextAdd () veya LineAdd () bulamadım.

 
Dennis Kirichenko :

Bir kaç. Ve orada TextAdd () veya LineAdd () bulamadım.

Tünaydın! Sorununuzun çözümü şu satırlarda yatıyor:

Ayrıca, Grafik kitaplığının ek özellikleri arasında, grafiğe yeni öğeler eklemenize izin veren yöntemlere dikkat edilmelidir:

  1. TextAdd() - grafikte rastgele bir yere metin ekler, koordinatlar gerçek zamanlı olarak ayarlanmalıdır. Görüntülenen metne ince ayar yapmak için FontSet yöntemini kullanın.
  2. LineAdd() - çizelgede rastgele bir yere bir çizgi ekler, koordinatlar gerçek zamanlı olarak ayarlanmalıdır.
  3. MarksToAxisAdd() - belirtilen koordinat eksenine yeni işaretler ekler.
Bu öğelerin eklenmesiyle ilgili verilerin hiçbir yerde saklanmadığını, bu nedenle grafikte yeni bir eğri çizdikten veya yeniden çizdikten sonra hepsinin üzerine yazılacağını not etmek önemlidir.

Graphic.CurvePlotAll() yöntemini çağırarak çizmek istediğiniz metnin üzerine yazarsınız. Şu şekilde doğru olacaktır:

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

Sonuç:

 

Roman Konopelko , çok teşekkür ederim!

Hmm, IMHO, grafiklerle çalışmanın bu tür özellikleri Belgelerde belirtilmelidir.

 

Uzmanlara soru. Bilimsel CGraphic'e dayalı bir onay grafiği vardır.


İhtiyaç:

1) MT'deki grafikte olduğu gibi bir girinti yapın. Son değerler grafiğin sağ kenarına bitişik olmasın diye;

2) Y ölçeğini sol yerine sağda görüntüleyin.

Ben öyle bir ihtimal bulamadım...

 

Dennis Kirichenko :

İhtiyaç:

1) MT'deki grafikte olduğu gibi bir girinti yapın. Son değerler grafiğin sağ kenarına bitişik olmasın diye;

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

//---

Neye benzediğine bir örnek:



 

Dennis Kirichenko :

İhtiyaç:

...

2) Y ölçeğini sol yerine sağda görüntüleyin.

Ama böyle bir olasılık yok. Teraziyi yalnızca sağa yerleştirmek değil, aynı zamanda örneğin Excel'de yapılabileceği gibi iki bağımsız ölçeği (ana ve yardımcı) görüntülemek mümkün olsaydı iyi olurdu:


 

Anatoly, çok teşekkür ederim! 1. maddeye göre yardım edildi. Evet, CAxis::MaxGrace(const double value) eksen yöntemini kaçırdım.