Teste CGraphic - perguntas e sugestões - página 8

 
Vladimir Karputov:

E imediatamente um desejo: posso fazer uma fonte inclinada (angular) para ambos os eixos de uma só vez (my_graphic.FontSet("Arial",10,0,180);). Não podemos fazer este método de ajuste de fonte (ou ângulo) para um eixo separado?

Boa tarde! Para mudar a inclinação da fonte do eixo seria necessário acrescentar três novos campos e seis novos métodos à classe CAxis para mantê-los, e já parece um pouco sobrecarregado no momento. Portanto, não posso dizer se tal funcionalidade será acrescentada ou não. No seu caso, posso aconselhar a implementação do método CreateAxes (reescrever literalmente duas linhas).

 

Você poderia me dizer como adicionar texto a um quadro científico? Não importava como eu tentasse, não funcionava. Aqui está o código ligeiramente modificado a partir do exemplo:

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


Em geral, muito obrigado por haver "numerosos" exemplos naCGraphic!!!

Você tem que gastar muito tempo com algumas pequenas coisas, até cuspir, jurar e jogar tudo no inferno...

 
Dennis Kirichenko:

Na verdade, muito obrigado pelos "numerosos" exemplos em CGraphic!!!

Mas há exemplos, por exemplo 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.
 

Poucos. E eu não encontrei TextAdd() ou LineAdd() lá.

 
Dennis Kirichenko:

Poucos. E eu não encontrei lá nem TextAdd() nem LineAdd().

Boa tarde! A solução para seu problema está nestas linhas:

Entre as capacidades adicionais da biblioteca de gráficos, devemos também mencionar métodos que permitem acrescentar novos elementos ao gráfico:

  1. TextAdd()- adiciona texto a um lugar arbitrário no gráfico, as coordenadas devem ser definidas em escala real. Use o método FontSet para afinar o texto exibido.
  2. LineAdd() - adiciona uma linha a um lugar arbitrário no gráfico, as coordenadas devem ser definidas em escala real.
  3. MarksToAxisAdd() - adiciona novas marcas no eixo de coordenadas especificado.
É importante notar que os dados sobre a adição destes elementos não são armazenados em nenhum lugar, portanto, após desenhar uma nova curva no gráfico ou redesenhá-lo, todos eles serão sobrescritos.

Você chama o método gráfico.CurvePlotAll() para sobrescrever o texto que você queria desenhar. A maneira correta de fazer isso é a seguinte:

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, muito obrigado!

Sim, acho que tais peculiaridades de trabalho com gráficos devem ser especificadas na Documentação.

 

A questão para os conhecedores é esta. Há um gráfico de carrapato baseado em um CGraphic científico.


É necessário:

1) travessão, como no gráfico em MT. Para que os últimos valores não fiquem adjacentes à borda direita do gráfico;

2) Mostrar a escala Y à direita em vez da esquerda.

Não consegui encontrar tais características nos métodos...

 

Dennis Kirichenko:

O seguinte é necessário:

1) Indentido como no gráfico MT. Para que os últimos valores não fiquem adjacentes à borda direita do 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;        }
...
  };

//---

Um exemplo do que isto parece:



 

Dennis Kirichenko:

Necessidade:

...

2) Mostrar a escala Y à direita em vez da esquerda.

Não existe tal opção. Seria bom se fosse possível não só colocar a balança à direita, mas também exibir duas escalas independentes (principal e auxiliar), como se pode fazer, por exemplo, no Excel:


 

Anatoly, muito obrigado! Isso ajudou no ponto 1. Sim, eu perdi oCAxis::MaxGrace(const duplo valor) método do eixo.