测试CGraphic--问题和建议 - 页 8

 
Vladimir Karputov:

并立即提出一个愿望:我可以一次为两个轴做一个斜的(有角度的)字体(my_graphic.FontSet("Arial",10,0,180);)。难道不可能使这种字体(或角度)的设置方法成为一个单独的轴?

下午好!为了改变轴的字体斜度,你需要在CAxis类中增加三个新的字段和六个新的方法来维护它们,而目前它已经看起来有点过载了。所以我不能说这样的功能是否会被添加。在你的情况下,我可以建议你实现CGraphics的 后代,并在其中覆盖CreateAxes方法(重写两行字)。

 

你能告诉我如何在科学图表中添加文本 吗?无论我怎么努力,都没有用。下面是例子中稍作修改的代码。

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


总的来说,非常感谢CGraphic 上有 "众多 "的例子!!。

你必须在一些小事上花费大量的时间,直到你吐口水,骂人,把一切都扔到地狱里去......。

 
Dennis Kirichenko:

事实上,非常感谢你在CGraphic上提供的 "众多 "例子!!!。

但也有一些例子,例如:https://www.mql5.com/ru/articles/2866https://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.
 

很少。而且我在那里没有找到TextAdd()或LineAdd()。

 
Dennis Kirichenko:

很少。而我在那里没有找到TextAdd()或LineAdd()。

下午好!解决你的问题就在这几行。

在图形库的额外功能中,我们还应该提到允许你向图表添加新元素的方法。

  1. TextAdd()- 将文本添加到图表的任意位置,坐标必须设置为真实比例。使用FontSet方法来微调显示的文本。
  2. LineAdd()- 在图表的任意位置添加一条线,坐标必须设置为真实比例。
  3. MarksToAxisAdd()- 在指定的坐标轴上添加新标记。
需要注意的是,添加这些元素的数据并不存储在任何地方,因此,在图表上绘制新的曲线或重新绘制后,它们都会被覆盖。

你调用graphic.CurvePlotAll()方法来覆盖你想画的文字。正确的方法如下。

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

结果。

 

罗曼-科诺佩尔科,非常感谢你!

是的,我认为用图形工作的这种特殊性应该在文档中说明。

 

鉴赏家的问题是这样的。有一个基于科学CGraphic的 滴答图。


它需要。

1)按MT中的图表缩进。这样,最后的数值就不会与图形的右边界相邻。

2)在右边而不是左边显示Y刻度。

我在方法中找不到这样的功能...

 

Dennis Kirichenko:

需要以下内容。

1)按MT图的方式缩进。这样,最后的数值就不会与图形的右边界相邻。

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

//---

这是一个看起来像什么的例子。



 

Dennis Kirichenko:

需要。

...

2)在右边而不是左边显示Y刻度。

没有这样的选择。如果不仅可以把刻度放在右边,而且可以显示两个独立的刻度(主刻度和辅助刻度),就像你在Excel中可以做的那样,那就更好了。


 

安纳托利,非常感谢你它在第1点上有帮助。是的,我错过了CAxis::MaxGrace(const double value) 轴方法。