リニアングラフやVCSSLの最新版をリリース、目盛りの位置や内容を自由に指定可能に!

RINEARN では先日、グラフソフトのリニアングラフ3Dリニアングラフ2D、およびこれらの制御機能を持つスクリプト言語 VCSSL の最新版をリリースしました。

今回の更新から、グラフの目盛りの位置や内容を、自由に指定できる「手動(MANUAL)」目盛りモードがサポートされました。この記事では、その詳細をお知らせします!

- 目次 -

現状の課題

今回の拡張の話に入る前に、まずは今までの状況について触れておきましょう。

現状のリニアングラフでは、細かい見栄えについては結構投げやりな部分がある

リニアングラフは、発表/出版用などに整った図を作成する方向よりは、むしろデータ解析の日常などでの「普段使い」をメインに想定しているグラフソフトです。 そして、整った作図が必要な場面では、前者のような作図品質重視のグラフソフトを併用する事を想定しています。

これは、作図品質重視のグラフソフトは既にメジャーなものがいくつも存在するのに対して、日常での手軽さを重視したようなグラフソフトは意外と(本当に意外なほど)少なく、そこを補うのがリニアングラフの一番の役割と考えているためです。

ただ、正直に言うと、上記を悪い意味で言い訳にしてしまっている 部分もあります。 例えば、細かい「見栄え」の改善に関しては、なかなか高い優先度が割り振られず、先延ばしになりがちです。

実際、かなり昔のバージョンで実装された投げやりな仕様が、そのままずっと続投されている箇所もあります。

目盛りは特にそう

例えば、実際にリニアングラフを日常で使ってくださっている方々には周知の事実かと思いますが、「目盛り」に関しては初期バージョンからあまり変化していないです。

具体的にはこれまで、「プロット範囲の最大値と最小値の間を等分割して、その位置に目盛りを描く」というモードしかありませんでした。 これはこれで便利な場面もあるのですが、さすがに「このモードしかない」というのは極端すぎるだろう、というのは開発側でもずっと認識していました。

しかし、目盛り関連の処理って、実は意外と結構複雑でややこしいんです。 しかもグラフの中枢の描画処理に関わるので、後付けで入れ込むと結構厄介な拡張作業になります。 そのため、今までずるずると先延ばしになってしまっていました。

次期版では大きく改善されるものの、リリースはまだ数年先…

一応、既に開発が始まっている次期版の Ver.6 では、目盛り描画は優先的なテコ入れ対象になっていて、設定自由度がかなり向上しています。 しかし Ver.6 の正式リリースにはまだ年単位の時間がかかりそうです。

で、そうしている間にも、やっぱり目盛り関連のご要望・ご質問は結構いただくんですよね。 直近でも数件続けてご要望をいただいて、そのうち1件は海外からで、さすがに「数年後の Ver.6 を待ってください」とは言っていられない状況になってきました。

どうも開発側が思っていた以上に、目盛り描画がユーザーの足を引っ張っていたようです。

現行版でも目盛り描画をテコ入れする事に

そんなこんなで結局、現行版の Ver.5 系でも、目盛り描画処理にテコ入れをして、自由度を増やしていく事に決めました。

次期版 Ver.6 の開発と二度手間になってしまいますが、まあ Ver.5 系もこの先数年は使われる事や、感想を早期に得られるプロトタイプ的な役割も期待できる事を考えると、それはそれでアリかなと判断しました。

目盛り描画の拡張

さて、リニアングラフでの目盛り描画のテコ入れは、いくつかの段階に分けて行う予定です。

今回追加したのは「手動」モード

今回はその第一弾として、「手動」モードをサポートしました。これは、目盛りの位置と表示内容を、完全に自由に指定できるモードです。 具体例としては下図のような感じです:

と、このように、従来だったらどう工夫しても絶対に無理だったような目盛りを簡単に描けます。

ただ、このモードでは、目盛りの位置と表示内容を「常に明示的に指定しないといけない」という事になるため、常用するには面倒です。

しかし改良の第一弾としては、とりあえず現状で不可能だった用途を幅広くカバーするために、「どんな目盛りでも一応は描ける」という自由度の高さを優先しました。

もっとお手軽で、見ばえがよく常用もできるようなモードは、また色々と工夫しながら、後々のアップデートで追加していきます。

使い方

この新しいモードを使うには、まずメニューバーから「編集」>「目盛りの設定」>「刻み」タブを開きます。

※ 目盛りの設定画面は、スペースの限界が迫っていたため、今回からタブ式に改修しました。レイアウトは、従来の縦並びの項目列が、それぞれタブとして整理されただけです。

すると「モード」という選択項目があり、標準では「等分割」に設定されています。これが従来のモードです。ここを新たに、今回追加された「手動」に設定しましょう。

すると、「位置」と「表記」という入力項目が出現します。「位置」項目に目盛りの位置座標を、「表記」項目に目盛りの表示内容を、それぞれカンマ「 , 」区切りで入力します

※ 「表記」項目には数字でなくても、文字や語句などを自由に入れられます。もし、値そのものにカンマを入れ込みたい場合には、カンマ記号を「\」記号でエスケープし、「\,」のように入力します。

項目内容を入力したら、「SET」ボタンを押すと、グラフに反映されます。結果は先ほど掲載した図の通りです。

プログラム制御用のAPIも拡張

ところでリニアングラフは、プログラムから制御して、グラフ描画ライブラリとして使ったり、大量のデータのプロット処理を自動化したり等もできます。

今回の拡張に併せて、そういったプログラム制御用のAPIにも、目盛りの位置・表記を自由に設定するための機能を追加しました。

Java言語

まずはJava言語での制御用APIです。APIの使い方については 3Dの方はこちらの解説ページ2Dの方はこちらのページ をお読みください。

今回、3Dの方では、Java用APIの最表層である RinearnGraph3Dクラスに、以下のメソッドを追加しました:

setXTicks(double[] tickCoordinates, String[] tickLabels)
X軸の目盛りの位置とラベル(表記)を設定します。
setYTicks(double[] tickCoordinates, String[] tickLabels)
Y軸の目盛りの位置とラベル(表記)を設定します。
setZTicks(double[] tickCoordinates, String[] tickLabels)
Z軸の目盛りの位置とラベル(表記)を設定します。
setColorBarTicks(double[] tickCoordinates, String[] tickLabels)
カラーバーの目盛りの位置とラベル(表記)を設定します。

同様に2Dの方では、RinearnGraph2Dクラスに以下を追加しました:

setXTicks(double[] tickCoordinates, String[] tickLabels)
X軸の目盛りの位置とラベル(表記)を設定します。
setYTicks(double[] tickCoordinates, String[] tickLabels)
Y軸の目盛りの位置とラベル(表記)を設定します。

VCSSL

続いて、スクリプト言語 VCSSL での制御用APIの拡張です。

まず3Dの方では、Graph3Dライブラリに、以下の関数を追加しました:

setGraph3DTickX(int graphID, double tickCoords[], string tickLabels[])
X軸の目盛りの位置とラベル(表記)を設定します。
setGraph3DTickY(int graphID, double tickCoords[], string tickLabels[])
Y軸の目盛りの位置とラベル(表記)を設定します。
setGraph3DTickZ(int graphID, double tickCoords[], string tickLabels[])
Z軸の目盛りの位置とラベル(表記)を設定します。
setGraph3DTickColorBar(int graphID, double tickCoords[], string tickLabels[])
カラーバーの目盛りの位置とラベル(表記)を設定します。
setGraph3DTick(int graphID, double xTickCoords[], string xTickLabels[], double yTickCoords[], string yTickLabels[], double zTickCoords[], string zTickLabels[], double colorBarTickCoords[], string colorBarTickLabels[])
各軸の目盛りの位置とラベル(表記)を設定します。

同様に2Dの方では、Graph2Dライブラリに以下の関数を追加しました:

setGraph2DTickX(int graphID, double tickCoords[], string tickLabels[])
X軸の目盛りの位置とラベル(表記)を設定します。
setGraph2DTickY(int graphID, double tickCoords[], string tickLabels[])
Y軸の目盛りの位置とラベル(表記)を設定します。
setGraph2DTick(int graphID, double xTickCoords[], string xTickLabels[], double yTickCoords[], string yTickLabels[])
各軸の目盛りの位置とラベル(表記)を設定します。

今後

今回の拡張内容は、以上の通りです。

本文中でも述べた通り、リニアングラフの目盛り拡張は、複数の段階を検討しています。今回はその第一ステップで、今後も引き続きいくつかのモードを追加していく予定です。 その際は、またこのコーナーにて随時お知らせいたします!