Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to plot multiple plots in unicodeplots.jl?

Tags:

julia

I want to plot multiple lines(here simplified as two), but don't know how to draw in different colors on same plot. Here is the separated figures version.

using UnicodePlots, DataFrames
function job()
    names, data = ["A", "B"], [
       DataFrame("x"=>[1, 2, 3], "y"=>[3, 5, 7]),
       DataFrame("x"=>[1, 2, 3], "y"=>[8, 2, 6]),
       ]
    y_min, y_max = typemax(Int64), typemin(Int64)
    y_min = min(minimum(data[1].y), minimum(data[2].y))
    y_max = max(maximum(data[1].y), maximum(data[2].y))
    ylim = (y_min, y_max)
    for i = 1:length(names)
        p = lineplot(data[i].x, data[i].y, name=names[i], ylim=ylim)
        show(p)
        println("")
        #if i == 1  
        #    p=lineplot(data[i].x, data[i].y, name=names[i], ylim=ylim)
        #else  # failed for p undefined when i == 2
        #    lineplot!(p, data[i].x, data[i].y, name=names[i], ylim=ylim)
        #end
    end
    #show(p)
    println("")
end
job()
like image 259
Daniel YC Lin Avatar asked Mar 25 '26 18:03

Daniel YC Lin


1 Answers

It was almost correct. Here is the fixed version:

using UnicodePlots, DataFrames
function job()
    names, data = ["A", "B"], [
       DataFrame("x"=>[1, 2, 3], "y"=>[3, 5, 7]),
       DataFrame("x"=>[1, 2, 3], "y"=>[8, 2, 6]),
       ]
    y_min, y_max = typemax(Int64), typemin(Int64)
    y_min = min(minimum(data[1].y), minimum(data[2].y))
    y_max = max(maximum(data[1].y), maximum(data[2].y))
    ylim = (y_min, y_max)
    local p
    for i = 1:length(names)
        if i == 1  
            p=lineplot(data[i].x, data[i].y; name=names[i], ylim=ylim)
        else
            lineplot!(p, data[i].x, data[i].y; name=names[i])
        end
    end
    show(p)
    println("")
end
job()

Issues were:

  • When adding another line, cannot change axis.
  • Variables inside loops need to be defined outside to extend their scope.

Think that's it.

like image 80
Dan Getz Avatar answered Mar 27 '26 16:03

Dan Getz