Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:41   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 使用MATLAB的绘图功能作为Fortran程序的交互部分

尽管你们中的许多人对我的目标都有一个不错的主意,但仅通过阅读标题,还是请给我一个简单的介绍。

我有一个Fortran程序-它包含一个程序,一些内部子例程,带有自己的程序的7个模块,以及...就是这样。

无需赘述,因为我认为目前没有必要, 将MATLAB的绘图功能(主要是带有一些自定义的plot(x,y))用作程序的交互式部分的最简单方法是什么?现在,我正在使用一些自己的自定义绘图例程(基于HPGL和Calcomp的例程),但是作为我自己的一部分练习,我想看看它可以在哪里以及如何工作(甚至可能是我的建议?)。另外,我需要付出多少努力?

我知道这个主题已经在网上的许多“教程”中得到了广泛的描述,但是由于某些原因,我很难找到真正简单但说明性的入门主题。因此,如果任何人都可以发表一个或两个简单的示例,我将不胜感激。或者只是牵着我的手,引导我完成一个工作示例。

平台:Win XP SP2,Matlab 2008b上的IVF 11.something :)



回答:

继续讨论DISLIN作为解决方案,并给出不适合评论的答案...

@MSB-您好。很抱歉写出您的答案,但这些评论太短了,无论如何,以答案的形式回答问题是……

DISLIN具有快速绘图功能-例程QPLOT仅需要三个参数即可绘制曲线:X数组,Y数组和数字N。请参见手册的第16章。再加上几个额外的调用即可选择输出设备并标记轴。我没有用过,所以我不知道自动缩放的效果如何。

是的,我知道Quickplot及其相关的例程,但是它对于我的需求来说太固定了(无法更改任何内容),是的,它的自动缩放有些古怪。此外,graf内部的边距过大。

或者,如果您想使用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 这会将极值正确地放在轴上。您是否知道我该如何在外面设置一个“大刻度线余量”,以便在曲线和轴之间放置一些区域(同时仍保持setcl的效果)?

即使您不喜欢内置的自动缩放功能,但是如果您已经在使用DISLIN,滚动自定义缩放功能也比从MATLAB调用Fortran容易。您可以使用Fortran内在函数minval和maxval查找数据中的最小和最大值,而不是编写一个子例程以将其向外舍入为“ nice”个舍入值。类似地,子程序决定刻度线的间距。

这实际上不是那么容易实现(并且证明我错了的想法将很受赞赏)。或者我应该说,如果您知道价值观的大致范围,那很容易。但是,如果您不这样做,并且您不知道自己的值是在13-34范围内还是在1330-3440之间,那么...

...如果我在这里完全走错了路,请解释一下您是否提出了不同的建议。我的英语有点缺乏,所以我只能希望以上内容可以理解。

在确定圆图开始/结束值的子例程中,您可以将实际的最小/最大值定标为始终在1到10之间,然后有一个表来选择合适的取整值,然后不定标回到正确的范围。

-



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 22:42


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.