Prueba CGraphic - preguntas y sugerencias - página 8

 
Vladimir Karputov:

E inmediatamente un deseo: puedo hacer una fuente inclinada (en ángulo) para ambos ejes a la vez (mi_gráfico.FontSet("Arial",10,0,180);). ¿No es posible hacer este método de ajuste de la fuente (o del ángulo) para un eje separado?

Buenas tardes! Para cambiar la inclinación de la fuente del eje habría que añadir tres nuevos campos y seis nuevos métodos a la clase CAxis para mantenerlos, y ya parece un poco sobrecargada en este momento. Así que no puedo decir si esa funcionalidad se añadirá o no. En tu caso, te puedo aconsejar que implementes el descendiente de CGraphics y anules el método CreateAxes en él (reescribiendo literalmente dos líneas).

 

¿Podría decirme cómo añadir texto a un gráfico científico? No importaba cómo lo intentara, no funcionaba. Aquí está el código ligeramente modificado del ejemplo:

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 general, ¡¡¡muchas gracias que hay "numerosos" ejemplos enCGraphic!!!

Tienes que dedicar mucho tiempo a algunas cosas pequeñas, hasta que escupes y juras y lo mandas todo a la mierda...

 
Dennis Kirichenko:

En realidad, ¡¡¡muchas gracias por los "numerosos" ejemplos sobre CGraphic!!!

Pero hay ejemplos, por ejemplo https://www.mql5.com/ru/articles/2866 y 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.
 

Pocos. Y no he encontrado allí TextAdd() ni LineAdd().

 
Dennis Kirichenko:

Pocos. Y no encontré allí ni TextAdd() ni LineAdd().

¡Buenas tardes! La solución a su problema está en estas líneas:

Entre las capacidades adicionales de la biblioteca de gráficos también debemos mencionar los métodos que permiten añadir nuevos elementos al gráfico:

  1. TextAdd()- Añade texto a un lugar arbitrario del gráfico, las coordenadas deben estar ajustadas a escala real. Utilice el método FontSet para ajustar el texto mostrado.
  2. LineAdd() - Añade una línea a un lugar arbitrario del gráfico, las coordenadas deben ajustarse a escala real.
  3. MarksToAxisAdd() - añade nuevas marcas en el eje de coordenadas especificado.
Es importante tener en cuenta que los datos de la adición de estos elementos no se almacenan en ningún lugar, por lo tanto, después de dibujar una nueva curva en el gráfico o redibujarla, se sobrescribirán todos.

Llamas al método graphic.CurvePlotAll() para sobrescribir el texto que querías dibujar. La forma correcta de hacerlo es la siguiente:

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

Resultado:

 

Roman Konopelko, ¡muchas gracias!

Sí, creo que estas peculiaridades del trabajo con gráficos deberían especificarse en la Documentación.

 

La pregunta para los entendidos es la siguiente. Hay un gráfico de garrapatas basado en un CGraphic científico.


Es necesario:

1) Sangría como en el gráfico en MT. Para que los últimos valores no sean adyacentes al borde derecho del gráfico;

2) Mostrar la escala Y a la derecha en lugar de a la izquierda.

No pude encontrar tales características en los métodos...

 

Dennis Kirichenko:

Se necesita lo siguiente:

1) Sangría como en el gráfico MT. Para que los últimos valores no sean adyacentes al borde derecho del gráfico;

//+------------------------------------------------------------------+
//| 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 ejemplo de lo que parece:



 

Dennis Kirichenko:

Necesidad:

...

2) Mostrar la escala Y a la derecha en lugar de a la izquierda.

No existe tal opción. Estaría bien que fuera posible no sólo colocar la escala a la derecha, sino también mostrar dos escalas independientes (principal y auxiliar), como se puede hacer, por ejemplo, en Excel:


 

Anatoly, ¡muchas gracias! Ayudó en el punto 1. Sí, me faltó el método del ejeCAxis::MaxGrace(const double value).