コメントに収まらない答えで、解決策としてDISLINの議論を続けます...
@MSB-こんにちは。あなたの答えを書いて申し訳ありませんが、これらのコメントは短すぎます、そして答えの形で答えの形で質問に答えることは...とにかく...
DISLINのクイックプロット機能があります。ルーチンQPLOTは、曲線をプロットするために、X配列、Y配列、および数値Nの3つの引数のみを必要とします。マニュアルの第16章を参照してください。さらに、出力デバイスを選択して軸にラベルを付けるための追加の呼び出しがいくつかあります。私はこれを使ったことがないので、自動スケーリングがどれほど優れているかわかりません。
はい、私はQuickplotとそれに関連するルーチンを知っていますが、私のニーズにはあまりにも固定されており(何も変更できません)、はい、自動スケーリングはやや風変わりです。また、グラフ内のマージンが大きすぎます。
または、GRAFの機能を使用してグラフボックスを設定する場合は、推奨値を自動的に生成するサブルーチンGAXPARがあります。LABDIGの最初の引数として-2は、目盛りラベルの桁数を自動的に決定します。
ルーチンを試しましたか?
申し訳ありませんが、dislinのインデックスであなたが参照しているGAXPARルーチンが見つかりません。まさにそのように呼ばれていますか?
MSBによる返信:はい、GAXPARのスペルについては確信しています。これは、DISLIN9.5PDFマニュアルの第4章の最後のルーチンです。おそらくそれは新しいルーチンですか?また、自動スケーリングへの別のパスがあります:SETSCL-第6章を参照してください。
これまでのところ、(いくつかの「ガムテープ」ソリューションを除いて)私が行っていることは
use dislin; implicit none
real, dimension(5) :: &
x = [.5, 2., 3., 4., 5.], &
y = [10., 22., 34., 43., 15.]
real :: xa, xe, xor, xstp, &
ya, ye, yor, ystp
call setpag('da4p'); call metafl('xwin');
call disini(); call winkey('return');
call setscl(x,size(x),'x');
call setscl(y,size(y),'y')
call axslen(1680,2376) !(8/10)*2100 and 2970, respectively
call setgrf('name','name','line','line')
call incmrk(1); call hsymbl(3);
call graf(xa, xe, xor, xstp, ya, ye, yor, ystp); call curve(x,y,size(x))
call disfin()
end
これにより、極値が軸に正しく配置されます。曲線と軸の間に(setsclの効果を維持しながら)領域を配置するために、外側に1つの「メジャーティックマージン」を設定するにはどうすればよいか知っていますか?
組み込みの自動スケーリングが気に入らない場合でも、すでにDISLINを使用している場合は、MATLABからFortranを呼び出すよりも、独自の自動スケーリングを実行する方が簡単です。Fortran組み込み関数minvalおよびmaxvalを使用して、データ内の最小値と最大値を見つけることができます。それよりも、外側に丸めて「適切な」丸め値にするサブルーチンを作成することができます。同様に、目盛りの間隔を決定するためのサブルーチン。
これは実際にはそれほど簡単ではありません(そして私が間違っていることを証明するアイデアは喜んで感謝されます)。または、私が言うべきことは、あなたの価値観が存在する大まかな範囲を知っていれば簡単です。しかし、そうでなく、値が13〜34の範囲にあるのか、1330〜3440の範囲にあるのかわからない場合は、...
...私がここで完全に間違った方向に進んでいる場合は、何か別のことを言っているかどうか説明してください。私の英語はやや不足しているので、上記が理解できることを願っています。
ラウンドグラフの開始/終了値を決定するサブルーチン内で、実際の最小/最大値を常に1〜10にスケーリングし、適切なラウンド値を選択するためのテーブルを作成してから、スケールを解除して正しい範囲に戻すことができます。
-