replica nfl jerseysreplica nfl jerseyssoccer jerseyreplica nfl jerseys forums.silverfrost.com :: View topic - %pl[frame,scale=linear_log]
forums.silverfrost.com Forum Index forums.silverfrost.com
Welcome to the Silverfrost forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

%pl[frame,scale=linear_log]

 
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> ClearWin+
View previous topic :: View next topic  
Author Message
Kenneth_Smith



Joined: 18 May 2012
Posts: 835
Location: Lanarkshire, Scotland.

PostPosted: Wed Aug 13, 2025 12:10 pm    Post subject: %pl[frame,scale=linear_log] Reply with quote

Paul,

Something that needs looking at when you have time. In the second %pl graph the options frame and scale=linear_log are used. The resulting plot is not correct. Please see my mark up here:

https://www.dropbox.com/scl/fi/whuaiw6wfwhy8zpu0r6ss/Screenshot-2025-08-13-120045.jpg?rlkey=pqjut46zi1uabeqk6netkmbtk&st=rl1kaxh5&dl=0

Code:
program p
use clrwin
implicit none
integer, parameter :: n = 100
integer :: i, iw
real*8 :: x(n), y(n)
real*8 :: xend = 10.d0**3, xstart = 10.d0**(-1), twopi = 8.d0*atan(1.d0)

  ! Log spaced x values
  x = [( 10.0d0**(log10(xstart) + (i-1)*(log10(xend)-log10(xstart))/(n-1)), i=1,n )]

  ! y(x) = sin(2pi * log10(x)) will produce a repeating sine pattern evenly
  ! spaced on the semilog x-axis so you can immediately tell if the x-axis
  ! is scaled correctly.
  y = sin(twopi*log10(x))
 
  iw = winio@('%fn[Tahoma]%bf%ts&',1.5d0)
 
  call winop@('%pl[n_graphs=1,native,width=3,gridlines]')
  call winop@('%pl[colour=red,x_array,scale=linear_log]')
  iw = winio@('%ta%pl&', 600, 600, size(y,kind=3), x, y)
 
  call winop@('%pl[n_graphs=1,native,width=3,gridlines]')
  call winop@('%pl[frame]')
  call winop@('%pl[colour=red,x_array,scale=linear_log]')
  iw = winio@('%ta%pl', 600, 600, size(y,kind=3), x, y)
end program p
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 8251
Location: Salford, UK

PostPosted: Wed Aug 13, 2025 2:02 pm    Post subject: Reply with quote

Thanks. I will take a look at this.
Back to top
View user's profile Send private message AIM Address
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 8251
Location: Salford, UK

PostPosted: Thu Aug 21, 2025 3:17 pm    Post subject: Reply with quote

Ken

All the tick values ought to be at the bottom when using [frame] and I have fixed this. The alternative [framed] works correctly in this context.
Back to top
View user's profile Send private message AIM Address
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 8251
Location: Salford, UK

PostPosted: Thu Aug 21, 2025 3:59 pm    Post subject: Reply with quote

Ken

I added

call winop@('%pl[y_min=-1.005]')

to both for the graphs in your code in order to display the lowest y value and grid line.
Back to top
View user's profile Send private message AIM Address
Kenneth_Smith



Joined: 18 May 2012
Posts: 835
Location: Lanarkshire, Scotland.

PostPosted: Mon Aug 25, 2025 11:07 pm    Post subject: Reply with quote

Paul, Thanks for the recent DLLs with updates.

Your suggestion of call winop@('%pl[y_min=-1.005]') got me thinking. The �obvious� value for y_min is -1, and where does the additional 0.005 come from?

Suppose the y data ranges from ymin to ymax, then the corresponding �nice� range for the y axis might be yminp to ymaxp spanning y_range = ymaxp - yminp

The range of the y_axis in pixels is gh � top � bottom, where gh is graphics depth and top and bottom are margins. All of these are known or can be calculated. Call the resulting integer value y_range_pix.

So we can calculate y_per_pix = y_range/y_range_pix. Where the correction is required to show the minimum y value the additional value (subtracted from the obvious ymin value) is y_per_pix.

This correction can be calculated dynamically at runtime, allowing the graphic to be stretched vertically via a pivot, or if the data changes.

The code below explores this idea, although probably needs more work!

https://www.dropbox.com/scl/fi/9chqvm9bigraz35kja5fv/set_ymin_auto.f95?rlkey=ssybl8p69wjt5aqhzlea0j7ap&st=i4hjkmi9&dl=0


Last edited by Kenneth_Smith on Tue Aug 26, 2025 8:05 am; edited 1 time in total
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 8251
Location: Salford, UK

PostPosted: Tue Aug 26, 2025 7:09 am    Post subject: Reply with quote

Ken

The additional value was just a guess at something to make it work.

%pl could probably be improved in this respect but I don't know how much time it would take.

Changes of this nature must of necessity be minimal in order to avoid breaking existing usage.
Back to top
View user's profile Send private message AIM Address
Kenneth_Smith



Joined: 18 May 2012
Posts: 835
Location: Lanarkshire, Scotland.

PostPosted: Tue Aug 26, 2025 9:43 am    Post subject: Reply with quote

Paul,

I too have been guessing the value when I�ve encountered the problem in cases where the limits are well defined.

The relationship:
Code:
Yminpl = Ymin_desired -  (Ymax_desired - Ymin_desired)/(graphics_height � top_margin � bottom_margin)


may be useful to others encountering this problem and eliminate guessing - particularly as the y data range and also the size of %pl region and its margins change.

The �correction� is only required if ymin_desired .LE. 0.0 and ymax_desired .GE. 0.0 are both true.

I got rather carried away testing different values and adding pivots to test this yesterday! The program I posted obscures the simplicity of the underlying calculation.
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 8251
Location: Salford, UK

PostPosted: Tue Aug 26, 2025 10:27 am    Post subject: Reply with quote

Thanks Ken. That is helpful. I will see what I can do.
Back to top
View user's profile Send private message AIM Address
Display posts from previous:   
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> ClearWin+ All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group