basic_plots.f90 Source File


Source Code

program basic_plots
    !! Basic plotting examples using both simple and OO APIs
    use fortplot
    use fortplot_errors, only: SUCCESS
    implicit none

    call simple_plots()
    call multi_line_plot()

contains

    subroutine simple_plots()
        real(wp), dimension(50) :: x, y
        integer :: i, save_status
        logical :: all_success
        
        print *, "=== Basic Plots ==="
        
        ! Generate simple sine data - show 2 complete periods (0 to 4π)
        x = [(real(i-1, wp) * 4.0_wp * 3.141592653589793_wp / 49.0_wp, i=1, 50)]
        y = sin(x)
        
        ! Simple plot using functional API
        call figure()
        call plot(x, y, label='sin(x)')
        call title('Simple Sine Wave')
        call xlabel('x')
        call ylabel('sin(x)')
        all_success = .true.
        
        call savefig_with_status('output/example/fortran/basic_plots/simple_plot.png', save_status)
        if (save_status /= SUCCESS) all_success = .false.
        
        call savefig_with_status('output/example/fortran/basic_plots/simple_plot.pdf', save_status)
        if (save_status /= SUCCESS) all_success = .false.
        
        call savefig_with_status('output/example/fortran/basic_plots/simple_plot.txt', save_status)
        if (save_status /= SUCCESS) all_success = .false.
        
        if (all_success) then
            print *, "Created: simple_plot.png/pdf/txt"
        else
            print *, "ERROR: Failed to create some simple_plot files"
        end if
        
    end subroutine simple_plots

    subroutine multi_line_plot()
        real(wp), dimension(100) :: x, sx, cx
        type(figure_t) :: fig
        integer :: i, save_status
        logical :: all_success

        x = [(real(i, wp), i=0, size(x) - 1)]/5.0_wp
        sx = sin(x)
        cx = cos(x)
        
        ! Multi-line plot using OO interface
        call figure(figsize=[8.0_wp, 6.0_wp])
        call xlabel("x")
        call ylabel("y")
        call title("Sine and Cosine Functions")
        call add_plot(x, sx, label="sin(x)")
        call add_plot(x, cx, label="cos(x)")
        call legend()  ! Add legend for labeled plots
        all_success = .true.
        
        call savefig_with_status('output/example/fortran/basic_plots/multi_line.png', save_status)
        if (save_status /= SUCCESS) all_success = .false.
        
        call savefig_with_status('output/example/fortran/basic_plots/multi_line.pdf', save_status)
        if (save_status /= SUCCESS) all_success = .false.
        
        call savefig_with_status('output/example/fortran/basic_plots/multi_line.txt', save_status)
        if (save_status /= SUCCESS) all_success = .false.
        
        if (all_success) then
            print *, "Created: multi_line.png/pdf/txt"
        else
            print *, "ERROR: Failed to create some multi_line files"
        end if
        
    end subroutine multi_line_plot

end program basic_plots