Adding Guide.manual_color_key to Geom.ribbon plot with hex codes

I’m assuming I’m just missing something, but I can’t find how to do this in the docs.

Say I have a plot from the following data

using DataFrames, Gadfly, Distributions

# make some data 
x = range(0, 2π, length=100)
y1 = @. sin(x) + 0.01 * randn()
y2 = @. cos(x) + 0.01 * randn()
x = vcat(x,x)
y = vcat(y1,y2)
# string-based categorical variable 
func = vcat(repeat(["sin"], 100), repeat(["cos"], 100))

# make dataframe 
df = DataFrame(
    hcat(x,y,func),
    [:x,:y,:func]
)
df[!, 1] = convert.(Float64, df[:, 1]) # there's probably a better way to do this....
df[!, 2] = convert.(Float64, df[:, 2])
df[!, 3] = convert.(String, df[:, 3])

# add the upper and lower bounds for the ribbon 
df.ymax = df.y .+ rand(Uniform(0.3,0.7), 200)
df.ymin = df.y .- rand(Uniform(0.3,0.7), 200)

And I want to plot a line with a ribbon. I can do that no problem with this:

plot(df, x=:x,y=:y,
        ymax = :ymax, ymin = :ymin, alpha = [0.2],
        color = :func,
        Geom.line, Geom.ribbon)

which produces this:

But I want to specify which colors to use, which I think I am supposed to do via the Guide.manual_color_key, and that would ideally also let me rename the legend items, so I figured it would work something like this

plot(df, x=:x,y=:y,
        ymax = :ymax, ymin = :ymin, alpha = [0.2],
        color = :func,
        Geom.line, Geom.ribbon,
        Guide.manual_color_key("Function",["sin","cos"],
                                 ["#3b3759", "#cf8da7"]))

but that produces this:

I want both the ribbons and the lines to reflect the specified colors - how should I re-state that?

Okay actually I figured it out! It wasn’t Guide.manual_color_key I wanted, but instead Scale.color_discrete_manual! Apologies for my slander to the package authors, it was in fact in the docs (as it always is) I just hadn’t found it yet!!

The solution:

plot(df, x=:x,y=:y,
        ymax = :ymax, ymin = :ymin, alpha = [0.2],
        color = :func,
        Geom.line, Geom.ribbon,
        Guide.colorkey(title="Function",labels=["Sin","Cos"]),
        Scale.color_discrete_manual("#3b3759", "#cf8da7"))

Which produces exactly what I wanted :slight_smile: