Home Home Company Information Email 英語

XRT/graph FAQ

リソース

XRT/graphの軸の注釈を独自のラベルで置き換えるには?

XtNxrtAnnotationMethodをXRT_ANNO_VALUE_LABELSにセットし、値とストリング のペアを指定します。 このペアにはarray、generalのどちらのフォ-マットも使用できます。 詳細は、マニュアルの31ペ-ジを参照してください。

凡例の位置をコントロ-ルする方法。

XtNxrtGraphX、XtNxrtGraphY、XtNxrtLegendX、XtNxrtLegendYリソ-スを使用して グラフ領域と凡例の領域を指定できます。 詳細は、マニュアルの69 & 72ペ-ジを参照してください。

ヘッダ-領域を削除する方法。

XtNxrtHeaderXとXtNxrtHeaderYを負の値にセットすると、ウィンドウにはヘッダ-は表示されません。 または、XtNxrtHeaderStrings(P149)をNULLにセットすることもできます。

リソ-スをアップデ-トする度に、グラフが毎回再描画されないようにするには?

XtNxrtRepaintをFalseにセットしてから、リソ-スを設定します。その後、XtNxrtRepaintをTrueに戻して下さい。

軸やラベルに黒以外の色を指定する方法。

XtNxrtGraphForegroundColorを使用します。

多くのデ-タセットにデ-タスタイルを(短時間で)セットするには?

デ-タスタイルの配列を使用します。例えば、50個のデ-タセットには、次のようにスタイルをセットしてみてください。

#define Xcalloc(nelem, elsize) calloc(((nelem) > 0 ? (nelem) : 1), (elsize))
#define NELEM 51
 ...
 {
     XrtDataStyle **myDS= (XrtDataStyle **) Xcalloc(NELEM + 1, sizeof(XrtDataStyle *));
     for(i = 0; i < NELEM; i++)
     {
         myDS[i] = (XrtDataStyle *) Xcalloc(1, sizeof(XrtDataStyle));
         /* fill in data style here ... */
         myDS[i]->lpat = XRT_LPAT_SOLID;
         myDS[i]->fpat = XRT_FPAT_NONE;
         myDS[i]->color = "Red";
         myDS[i]->width = 1;
         myDS[i]->point = XRT_POINT_NONE;
         myDS[i]->pcolor = "Blue";
         myDS[i]->psize = 4;
     }
     myDS[NELEM] = NULL;      /* important! */
     XtVaSetValues(graph,
         XtNxrtDataStyles, myDS,
         NULL);
     XrtFreeDataStyles(myDS);
 }

グラフをズ-ムすると、軸が表示されなくなります。

ズ-ム機能は、調整可能です。 $XRTHOME/demo/graph/にある'feedback'デモを参照して、変更してください。 このデモのソ-スコ-ドは、$XRTHOME/src/graph/demos/feedback/にあります。 デフォルトでは、軸の範囲はデ-タの範囲から計算されます。 この軸の範囲を設定し直すことにより、グラフをズ-ムすることができます。 'feedback'デモに例がありますので参考にしてください。

XrtSetNthSetLabel()を使用してラベルを設定している場合、二つのラベルだけを セットし後はNULLにしても、これらのNULLのラベルが表示されてしまいます。


XrtSetNthSetLabel()は、ラベルをNULLにしてもこれを無視してしまいます。 代りにXtVaSetValues()を使用してください。

デ-タをソ-トできますか?

XrtDataSort()が使用できます。 この関数はライブラリにありますが、ソ-スも:

$XRTHOME/src/graph/util/xrtdrtns.c.

デ-タスタイルで、8番め以降はランダムになってしまいます。

デフォルトのデ-タスタイルは7個あります。 それ以上の場合、XRT/graphは、これらの7個をリサイクルして使用します。 独自のスタイルを使用する時は、各デ-タセットに対して定義してください。 独自に指定したデ-タスタイルは、デフォルトのスタイルのようにリサイクルされません。

XtNxrtData2を使用しているのに、複合グラフが作成できません。

デフォルトのXtNxrtType2はXRT_TYPE_BARです(P158)。 generalデ-タを使用している場合、棒グラフは表示されません(P15)。 グラフの種類かデ-タの種類を変更してください。

グラフ上に、線やpixmap等を描くには?

Xlibを使用してグラフ上に描画できます。 デモプログラムの'profile'に例がありますので参照してください。 プリコンパイルされたデモは、$XRTHOME/demo/graph/に、ソ-スコ-ドは$XRTHOME/src/graph/demos/profile/にあります。 (コンパイルするには、XRT/3dがインスト-ルされている必要があります。) Xlibの描画ファンクションはcontrols.cにあります。

XtNxrt[Header|Footer][Height|Width]リソ-スを変更できますか?

これらのリソ-スは変更できません。read-onlyです。

印刷

グラフを表示せずに印刷することはできますか。

XRT/graphは、グラフのサイズを決定し、フォントや色等のリソ-スを割り当てるためにXサ-バとコネクトする必要があります。 但し、グラフを画面に描画せずに出力することは可能です。 詳細は、こちらを参考にしてください。

Creating XRT/graph images for the web

複数ペ-ジにまたがるグラフを印刷する方法はありますか?

このような印刷は基本機能としてはサポ-トされていませんが、少し工夫をすると実行できます。 幅のパラメ-タを、グラフの横方向の印刷に必要なペ-ジ数分の長さにセットします。 (例: 2ペ-ジの場合は17"、3ペ-ジの場合は25.5")縦方向に長いグラフは、同様にして高さのパラメ-タをセットします。 x_offsetまたはy_offsetのどちらか該当する方を使用してグラフをシフトします。 (これは各セクションまたはペ-ジ毎に行ってください。) 1ペ-ジめではoffset=0で印刷し、左または下の部分が欠けたグラフが印刷されます。

2ペ-ジめでは、offset=-nにセットします。('n'は、ペ-ジの幅/高さ)です。offsetは必ず負の値にしてください。

サンプルと例

円グラフ(テキストの貼り付け、凡例も含む)

このコ-ドとデ-タは簡単な円グラフを作成します。 またここでは、テキストを貼り付けたり、凡例を作成する例も示しています。

#include <X11/Intrinsic.h>
#include <Xm/Xm.h>
#include <Xm/XrtGraph.h>
int main(int argc, char *argv[])
{
    XtAppContext app_context;
    Widget       graph, toplevel;
    XrtData      *my_data;
    XrtTextDesc text;
    static String textlist[] = { "here", NULL };
    static char *set_labels[] = {
        "aaa", "bbb", "ccc", "ddd", "eee", "fff", NULL};
    /* allocate and load the data */
    my_data = XrtMakeDataFromFile("pie.dat", NULL);
    XtSetLanguageProc(NULL, NULL, NULL);
    toplevel = XtVaAppInitialize(&app_context, "Plot 1", NULL, 0,
        &argc, argv, NULL, NULL);
    graph = XtVaCreateManagedWidget("mygraph",
        xtXrtGraphWidgetClass,      toplevel,
        XtNxrtData,                 my_data,
        XtNxrtType,                 XRT_TYPE_PIE,
        XtNxrtSetLabels,            set_labels,
        XtNxrtLegendShow,           True,
        XtNxrtPieThresholdMethod,   XRT_PIE_SLICE_CUTOFF,
        XtNxrtPieThresholdValue,    XrtFloatToArgVal(10.0),
        XtNxrtOtherLabel,           "other",
        NULL);
    text.position.data.type = XRT_TEXT_ATTACH_DATA;
    text.position.data.dataset = 1;
    text.position.data.set = XRT_OTHER_SLICE;
    /* data.point specifies which graph. 0 is the first, 1 is the 2nd */
    text.position.data.point = 0;
    text.strings = textlist;
    text.anchor = XRT_ANCHOR_HOME;
    text.offset = 0;
    text.connected = 0;
    text.adjust = XRT_ADJUST_RIGHT;
    text.fore_color = NULL;
    text.back_color = "Pink";
    text.border = XRT_BORDER_SHADOW;
    text.border_width = 2;
    text.font = NULL;
    text.psfont = "Courier-BoldOblique";
    (void) XrtTextCreate(graph, &text);
    free((char *) text.strings);
    XtRealizeWidget(toplevel);
    XtAppMainLoop(app_context);
}
/* Use the following data ("pie.dat"). Note, for two pie graphs, change
ARRAY 5 1 to ARRAY 5 2 and add another column of data.*/
ARRAY 5 1
# x values -- not used
1.0
# slice values - percentage
20.0
15.0
40.0
16.0
9.0

エラ-、警告、セグメンテ-ション・フォルト

グラフ・ウィジェットが、存在しないフォントを探しているようですが.....

XmFontListは、デフォルトのフォントを使用するようにするはずですが、場合によっては、機能しないことがあります。 その場合は、リソ-スファイルに次の事項を追加してください。

*.XtXrtGraph.FontList: my-favorite-fontlist-that-I-know-will-always-be-there

アプリケ-ションを起動すると、コアダンプが起きます。

浮動小数点リソ-スでXrtFloatToArgVal()を使用しているか確認してください。

'Unexpected symbol '#' in XrtGraph.hxx'は、どういう意味ですか。

このエラ-は、使用しているコンパイラがtoken pasting macroの新しいスタイル(##)をサポ-トしておらず、代わりにtoken pastingが、/**/を要求しているために起きています。 XrtGraph.hxxでは、古いコンパイラにも対応するようにはなっていますが、対応できない部分もあります。 これを回避するには、XrtGraph.hxxを編集し、##を/**/に変更してください。