Back to demo index

gnuplot demo script: solar_path.dem

autogenerated by webify.pl on Wed Aug 21 21:29:01 2024
gnuplot version gnuplot 6.1 last modified 2024-08-21
#
# Calculate solar path in horizontal coordinates (altitude, azimuth)
# Use gnuplot's polar mode with inverted R range so that the horizon
# (altitude 0°) is at the perimeter and altitude 90° is at the center.
#

save_encoding = GPVAL_ENCODING
set encoding utf8

set label 1 at screen 0.02, 0.95 font ":Bold,10"
set label 1 "Solar path at\nLatitude 47.67 N"
set timestamp "Seattle - %d %b %Y" offset 1,1

# Set up equations for Azimuth(t) and Altitude(t) as a function of
# t = seconds  before or after solar noon on the day of interest
# at a particular latitude.
# Here we calculate for Seattle (47.67 N  -122.28 W)

  Latitude = 47.67
  Longitude = -122.28
  Date = "21-12-2016"
  call 'solar_params.dem'

  array dummy[150]
  array winter_alt[150]; array winter_azi[150]
  time = -12 * Hour
  do for [t = 1 : 150] {
	winter_alt[t] = Altitude(time)
	winter_azi[t] = Azimuth(time)
	time = time + 10 * Minute
  }
  print Date, "    sunrise ", sunrise, "   sunset ", sunset, "    sunlight ", sunlight

  Date = "22-06-2017"
  call 'solar_params.dem'

  array summer_alt[150]; array summer_azi[150]
  time = -12 * Hour
  do for [t = 1 : 150] {
	summer_alt[t] = Altitude(time)
	summer_azi[t] = Azimuth(time)
	time = time + 10 * Minute
  }
  print Date, "    sunrise ", sunrise, "   sunset ", sunset, "    sunlight ", sunlight

  Date = strftime("%d-%m-%Y",time(0) + Day*Longitude/360.)
  call 'solar_params.dem'

  array today_alt[150]; array today_azi[150]
  time = -12 * Hour
  do for [t = 1 : 150] {
	today_alt[t] = Altitude(time)
	today_azi[t] = Azimuth(time)
	dummy[t] = time
	time = time + 10 * Minute
  }
  print Date, "    sunrise ", sunrise, "   sunset ", sunset, "    sunlight ", sunlight
  today = "Today ☉  \n".sunlight."\nof sunlight"

#
set angle degrees

set polar
set grid polar
unset xtics 
unset ytics
unset border
unset key
set size square
set rrange [90:0]

set ttics add ("N" 0, "E" 90, "S" 180, "W" -90) font ":Bold"
set rtics format "%.0f°"
set rtics 30
set rlabel "Altitude" offset -2 font ":Bold"
set border polar
set style data lines

# By convention North (azimuth 0°) is at the top with angles increasing clockwise
set theta top clockwise

plot dummy using (winter_azi[$1]):(winter_alt[$1]) lw 2 title "   Winter Solstice" at beg left, \
     dummy using (summer_azi[$1]):(summer_alt[$1]) lw 2 title "   Summer Solstice" at beg left, \
     dummy using (today_azi[$1]):(today_alt[$1]) lw 2 title today at end right


Click here for minimal script to generate this plot




set encoding save_encoding