11! *****************************************************************************************
22! > author: Jacob Williams
3- !   date: 4/14/2015 
3+ !   date: 6/16/2017 
44!   license: BSD
55! 
66!   For making simple x-y plots from Fortran.
@@ -56,11 +56,13 @@ module pyplot_module
5656        procedure , public  ::  add_imshow    ! ! add an image plot (using `imshow`)
5757        procedure , public  ::  add_hist      ! ! add a histogram plot to pyplot instance
5858        procedure , public  ::  savefig       ! ! save plots of pyplot instance
59+         procedure , public  ::  showfig       ! ! show plots of pyplot instance
5960        procedure , public  ::  destroy       ! ! destroy pyplot instance
6061
6162        !  private methods
62-         procedure  ::  execute ! ! execute pyplot commands
63-         procedure  ::  add_str ! ! add string to pytplot instance buffer
63+         procedure  ::  execute    ! ! execute pyplot commands
64+         procedure  ::  add_str    ! ! add string to pytplot instance buffer
65+         procedure  ::  finish_ops ! ! some final ops before saving
6466
6567    end type pyplot
6668
@@ -844,29 +846,70 @@ subroutine execute(me, pyfile)
844846    end  subroutine  execute 
845847! *****************************************************************************************
846848
849+ ! *****************************************************************************************
850+ ! > author: Jacob Williams
851+ ! 
852+ !  Some final things to add before saving or showing the figure.
853+ 
854+     subroutine  finish_ops (me )
855+ 
856+     class(pyplot),intent (inout ) ::  me  ! ! pyplot handler
857+ 
858+     if  (me% show_legend) then 
859+         call  me% add_str(' ax.legend(loc="best")' 
860+         call  me% add_str(' ' 
861+     end if 
862+     if  (me% axis_equal) then 
863+         call  me% add_str(' ax.axis("equal")' 
864+         call  me% add_str(' ' 
865+     end if 
866+ 
867+     end  subroutine  finish_ops 
868+ ! *****************************************************************************************
869+ 
847870! *****************************************************************************************
848871! > author: Jacob Williams
849872! 
850873!  Save the figure.
874+ ! 
875+ ! ### History
876+ !   * modified: Johannes Rieke 6/16/2017
877+ !   * modified: Jacob Williams 6/16/2017
851878
852-     subroutine  savefig (me , figfile , pyfile )
879+     subroutine  savefig (me , figfile , pyfile ,  dpi ,  transparent ,  facecolor ,  edgecolor ,  orientation )
853880
854-     class(pyplot),    intent (inout )        ::  me      ! ! pyplot handler
855-     character (len=* ), intent (in )           ::  figfile ! ! file name for the figure
856-     character (len=* ), intent (in ), optional  ::  pyfile  ! ! name of the Python script to generate
881+     class(pyplot),    intent (inout )        ::  me          ! ! pyplot handler
882+     character (len=* ), intent (in )           ::  figfile     ! ! file name for the figure
883+     character (len=* ), intent (in ), optional  ::  pyfile      ! ! name of the Python script to generate
884+     character (len=* ), intent (in ), optional  ::  dpi         ! ! resolution of the figure for png
885+                                                           ! ! [note this is a string]
886+     logical , intent (in ), optional           ::  transparent ! ! transparent background (T/F)
887+     character (len=* ), intent (in ), optional  ::  facecolor   ! ! the colors of the figure rectangle
888+     character (len=* ), intent (in ), optional  ::  edgecolor   ! ! the colors of the figure rectangle
889+     character (len=* ), intent (in ), optional  ::  orientation ! ! 'landscape' or 'portrait'
890+ 
891+     character (len= :),allocatable  ::  tmp  ! ! for building the `savefig` arguments.
857892
858893    if  (allocated (me% str)) then 
859894
860895        ! finish up the string:
861-         if  (me% show_legend) then 
862-             call  me% add_str(' ax.legend(loc="best")' 
863-             call  me% add_str(' ' 
896+         call  me% finish_ops()
897+ 
898+         ! build the savefig arguments:
899+         tmp =  ' "' // trim (figfile)// ' "' 
900+         if  (present (dpi)) tmp =  tmp// ' , dpi=' // trim (dpi)
901+         if  (present (transparent)) then 
902+             if  (transparent) then 
903+                 tmp =  tmp// ' , transparent=True' 
904+             else 
905+                 tmp =  tmp// ' , transparent=False' 
906+             end if 
864907        end if 
865-         if  (me % axis_equal)  then 
866-              call  me % add_str( ' ax.axis("equal") ' ) 
867-              call  me % add_str( ' ' ) 
868-         end if 
869-         call  me % add_str( ' plt.savefig(" ' // trim (figfile) // ' ") ' 
908+         if  (present (facecolor)) tmp  =  tmp // ' , facecolor=" ' // trim (facecolor) // ' " ' 
909+         if  ( present (edgecolor)) tmp  =  tmp // ' , edgecolor=" ' // trim (edgecolor) // ' " ' 
910+         if  ( present (orientation)) tmp  =  tmp // ' , orientation=" ' // trim (orientation) // ' " ' 
911+         call  me % add_str( ' plt.savefig( ' // tmp // ' ) ' ) 
912+         deallocate (tmp )
870913
871914        ! run it:
872915        call  me% execute(pyfile)
@@ -878,6 +921,35 @@ subroutine savefig(me, figfile, pyfile)
878921    end  subroutine  savefig 
879922! *****************************************************************************************
880923
924+ ! *****************************************************************************************
925+ ! > author: Johannes Rieke
926+ !   date: 6/16/2017
927+ ! 
928+ !  Shows the figure.
929+ 
930+     subroutine  showfig (me , pyfile )
931+ 
932+     class(pyplot),    intent (inout )        ::  me      ! ! pyplot handler
933+     character (len=* ), intent (in ), optional  ::  pyfile  ! ! name of the Python script to generate
934+ 
935+     if  (allocated (me% str)) then 
936+ 
937+         ! finish up the string:
938+         call  me% finish_ops()
939+ 
940+         ! show figure:
941+         call  me% add_str(' plt.show()' 
942+ 
943+         ! run it:
944+         call  me% execute(pyfile)
945+ 
946+     else 
947+         error stop  ' error in showfig: pyplot class not properly initialized.' 
948+     end if 
949+ 
950+     end  subroutine  showfig 
951+ ! *****************************************************************************************
952+ 
881953! *****************************************************************************************
882954    end module  pyplot_module
883955! *****************************************************************************************
0 commit comments