继续讨论 DISLIN 作为解决方案,答案不适合评论...
@MSB - 你好。我很抱歉写你的答案,但这些评论太短了,以答案的形式回答问题是......无论如何......
DISLIN 有快速绘图功能——例程 QPLOT 只需要三个参数来绘制曲线:X 数组、Y 数组和数字 N。请参阅手册的第 16 章。加上只有几个额外的调用来选择输出设备和标记轴。我没有用过这个,所以我不知道自动缩放有多好。
是的,我知道 Quickplot,它是相关的例程,但它对于我的需要来说太固定了(不能改变任何东西),是的,它的自动缩放有点古怪。此外,格拉夫内部的利润太大。
或者,如果您想使用 GRAF 的强大功能来设置您的图表框,可以使用子程序 GAXPAR 自动生成推荐值。-2 作为 LABDIG 的第一个参数自动确定刻度标签中的位数。
你试过套路吗?
抱歉,我在 dislin 的索引中找不到您要引用的 GAXPAR 例程。你确定它是这样称呼的吗?
MSB 回复: 是的,我确定 GAXPAR 的拼写。这是 DISLIN 9.5 PDF 手册第 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 的效果)?
即使您不喜欢内置的自动缩放,如果您已经在使用 DISLIN,滚动您自己的自动缩放将比从 MATLAB 调用 Fortran 更容易。您可以使用 Fortran 内在函数 minval 和 maxval 来查找数据中的最小值和最大值,而不是编写一个子例程向外舍入到“好的”舍入值。同样,一个子程序来决定刻度线的间距。
这实际上并不容易完成(并且很高兴证明我错了的想法)。或者我应该说,如果您知道您的价值观所在的粗略范围,这很容易。但是,如果您不这样做,并且您不知道您的值是在 13-34 范围内还是在 1330-3440 范围内,那么...
...如果我在这里完全走错了路,请解释一下你是否有不同的看法。我的英语有些欠缺,所以我只能希望以上内容可以理解。
在确定圆形图开始/结束值的子例程中,您可以将实际的最小/最大值缩放到始终介于 1 和 10 之间,然后有一个表格来选择漂亮的圆形值,然后取消缩放回正确的范围。
--