Kohshi's Blog
2013/12/18
QCustomPlotで凡例をグラフの外に表示→ちょっとめんどい
凡例はデフォルトではグラフ領域の中に表示される+設定で場所を指定できるみたいだが、 例えば入力を次々変えていってグラフを表示したい場合とか、グラフがどの領域にくるかわからない場合があるんだが。 そんな場合凡例はグラフ内でなくてグラフ外に表示しておいてほしいのでそのやり方を書いてみる。 結果、今の所設定一発っていうわけではなくて以下のページにもあるみたいにLayoutを調整して対応しないと いけないので、たかが凡例をグラフ外にもっていく割にはめんどい印象・・。 * [Position of legend outside graph](http://www.qcustomplot.com/index.php/support/forum/63) 以下のQCPLegendのページにも以下のように書いてある。 * [QCPLegend Class Reference](http://www.qcustomplot.com/documentation/classQCPLegend.html) > To move the legend to another position inside the axis rect, use the methods of the QCPLayoutInset. > To move the legend outside of the axis rect, place it anywhere else with the QCPLayout/QCPLayoutElement interface. 凡例を軸の内側に動かすためにはQCPLayoutInsetのmehodを使え。外に動かしたい場合はQCPLayout/QCPLayoutElementを使って外に配置しろ。 みたいなことをいってるので多分合ってると思うんだけど。 つまり例えば↓のようにQCPLayoutを使って自分で凡例を配置せよということらしい。
↑を実現するには、 1. もともと用意されているグラフを描画するLayoutにColumnを追加してQCPLayoutGridを配置し 2. そこに3つのRowを追加して上下にPadding用のQCPLayoutElementを配置し 3. 中央にQCPLegendを配置 という感じ。例によってHistogramを例にしてコードにすると ```cpp: MainWindow.cpp // When initialize QCustomPlot // Moved legend to outside of axis rect QCPLayoutGrid *subLayout = new QCPLayoutGrid; // グラフの右に挿入されるQCPLayoutGrid(subLayout) ui.histogram->plotLayout()->addElement(0, 1, subLayout); // (Row, Column) = (0,1)にsubLayoutを追加 subLayout->addElement(0, 0, new QCPLayoutElement); // subLayoutの(Row, Column) = (0,0)にPadding用QCPLayoutElementを subLayout->addElement(1, 0, ui.histogram->legend); // (Row, Column) = (1,0)に凡例(Legend)を追加 subLayout->addElement(2, 0, new QCPLayoutElement); // 同Paddingを追加 subLayout->setColumnStretchFactor(0, 0.01); // subLayoutの横幅はなるべく小さくする subLayout->setRowStretchFactor(1, 0.01); // subLayoutの凡例がはいるRow=1はなるべく小さくする ui.histogram->plotLayout()->setColumnStretchFactor(1, 0.01); // subLayoutが入るColumn=1の横幅はなるべく小さくする ``` もし、上記の設定なしだと以下の様に表示されるが、
上記のようにLayout設定すると以下のようになる。
なんとかグラフ領域の外にもっていけたけど、凡例の右側が切れてたりしてちょっとしっくりこないきもするなぁ。
ツイート
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿