继续讨论DISLIN作为解决方案的问题,由于答案太长而无法放在评论里...
@M. S. B. - 你好。我很抱歉在你的回答中写评论,但这些评论太短了,用回答的形式回答一个问题是...不管怎样...
有DISLIN的快速绘图功能--例程QPLOT只需要三个参数来绘制曲线:X数组、Y数组和数字N。请参阅手册的第16章。此外,只需几个额外的调用来选择输出设备并标记轴。我没有使用过它,所以我不知道自动缩放效果如何。
是的,我知道Quickplot及其相关例程,但对我的需求来说它太固定了(不能更改任何内容),而且它的自动缩放有点古怪。此外,图表内边距太大。
或者,如果您想利用GRAF设置您的图形框,可以使用子程序GAXPAR自动生成推荐值。 LABDIG的第一个参数为-2会自动确定刻度标签中数字的位数。
您尝试过这些例程吗?
抱歉,我在dislin的索引中找不到您提到的GAXPAR例程。您确定它的名称完全是这样吗?
M.S.B.的回复:是的,我确定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之间,然后有一个表格选择好看的圆形值,然后再将其还原到正确的范围。
--