Reputation: 1697
When I push new layer to an existing plot, it keeps the same color. Is there a way to change the color automatically when a new layer is pushed to a plot, or at least a way to set the color using a random number (I don't know in advance how many layers I will have) ?
y=[3, 7, 5, 1]
x=[1, 2, 3, 4]
xmin1 = x .- 0.1
xmax1 = x .+ 0.1
xmin2 = x .- 0.5
xmax2 = x .- 0.3
y=[3, 7, 5, 1]
x=[1, 2, 3, 4]
xmin1 = x .- 0.1
xmax1 = x .+ 0.1
xmin2 = x .- 0.5
xmax2 = x .- 0.3
p = plot(xmin=xmin1, xmax=xmax1, y=[3, 7, 5, 1], Geom.bar)
# The following creates a new layer that keeps the same color
push!(p, layer(xmin=xmin2, xmax=xmax2, y=[3, 7, 5, 1], Geom.bar ))
# I do not want to use this because I don't know how many layers I will have
# push!(p, layer(xmin=xmin2, xmax=xmax2, y=[3, 7, 5, 1], Geom.bar,
# Theme(default_color=colorant"green") ))
Upvotes: 1
Views: 242
Reputation: 1697
One possible solution:
Using Colors
function gen_colors(n)
cs = distinguishable_colors(n,
[colorant"#FE4365", colorant"#eca25c"], # seed colors
lchoices=Float64[58, 45, 72.5, 90], # lightness choices
transform=c -> deuteranopic(c, 0.1), # color transform
cchoices=Float64[20,40], # chroma choices
hchoices=[75,51,35,120,180,210,270,310] # hue choices
)
end
mycolors = gen_colors(n)
at run time you call this function with the number of layers to add in the plot then use elements of the returned array as arguments to default_color
. Namely, for the i-th layer use
Theme(default_color=mycolors[i])
Upvotes: 2