CGraphicのテスト - 質問と提案 - ページ 8

 
Vladimir Karputov:

そして早速、願望ですが、両軸の斜め(角度)フォントを一度に作ることができます(my_graphic.FontSet("Arial",10,0,180);)。このフォント(または角度)設定方法を別軸にできないか?

こんにちは!軸のフォントの傾きを変えるには、CAxisクラスに3つの新しいフィールドと6つの新しいメソッドを追加して維持する必要があり、現在すでに少し過負荷になっているようです。ですから、そのような機能が追加されるかどうかについては、何とも言えません。この場合、CGraphicsの 子孫を実装し、その中でCreateAxesメソッドをオーバーライドする(文字通り2行を書き換える)ことをお勧めします。

 

サイエンティフィックチャートにテキストを 追加する方法を教えてください。どうやってもうまくいかなかった。以下は、例のコードを少し修正したものです。

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.
 
Rashid Umarov:
しかし、例えば、https://www.mql5.com/ru/articles/2866、http s://www.mql5.com/ru/docs/standardlibrary/mathematics/stat のような例もある。

少ない。そして、そこには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();
  }

結果

 

Roman Konopelko さん、ありがとうございました。

そうですね、このようなグラフィックスを使った作業の特殊性については、ドキュメントに明記するべきだと思います。

 

目利きの方に質問です。科学的な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のように独立した2つの目盛り(主目盛りと補助目盛り)を表示することができれば良いと思います。


 

Anatolyさん、ありがとうございますポイント1では役に立ちました。はい、CAxis::MaxGrace(const double value)の 軸メソッドを見逃していました。