Makie color transparency

Hi,

I want to plot points/lines with colors and changing transparencies. The Makie doc shows some usages, but what I need is to input a numerical value for `color` and another numerical value for the transparency.

This simple example works

``````using GLMakie
c = to_color(:purple)
npoints = 10
color = [RGBAf(c.r, c.g, c.b, (i/npoints)^2) for i in 1:npoints]
lines(1:10, 1:10; color)
``````

so does this

``````lines(1:10, 1:10; color=1:10, colorrange=(1,10))
``````

But what if I want something like

``````lines(1:10, 1:10; color=(1:10, 0.5), colorrange=(1,10)) # not working so far
``````

i.e., changing color with a fixed transparency alpha? Or one step further, with a changing transparency setup?

For the first, do `colormap = (colormap, alpha)`. For the second, you could construct the colormap with changing transparency. Like `Colors.alphacolor.(Makie.to_colormap(x), alphavalues)`

1 Like

Thank you! The first one works nicely, e.g.:

``````lines(1:10, 1:10; color=1:10, colorrange=(1,10), colormap=(:turbo, 0.5))
``````

For the second one, although the following works:

``````using GLMakie.Colors
cmap = Colors.alphacolor.(resample_cmap(:turbo, 10), 0.1:0.1:1.0)
lines(1:10, 1:10; color=1:10, colorrange=(1,10), colormap=cmap)
``````

It is still different from what I need. In this way for example, red always corresponds to high `alpha`, while purple always corresponds to low `alpha`. I want the transparency to be independent of RGB (i.e. the numerical value x). Logically adding `alpha` to the colormaps wonâ€™t work; probably what I need is a way to convert a numerical value `x` to RGB while keeping `alpha` a separate variable,

``````c = to_color(:purple)
npoints = 10
# Here RGB are fixed, but alpha is a variable; how to map a value x to the RGB in the target colormap?
color = [RGBAf(c.r, c.g, c.b, (i/npoints)^2) for i in 1:npoints]
``````
``````julia> Makie.to_colormap(1.0)
ERROR: MethodError: no method matching to_colormap(::Float64)

julia> Makie.to_colormap([1.0, 2.0])
ERROR: MethodError: no method matching alpha(::Float32)
``````

How should I do that?

We donâ€™t have separate alpha (for other reasons) so youâ€™d have to do the colormap lookup manually and then assign alpha values to those looked up colors. There is no clear public API for this though and weâ€™re in the midst of refactoring colormaps and color conversions ourselves currently Clean up colormap handling and implement colorscale by SimonDanisch Â· Pull Request #2900 Â· MakieOrg/Makie.jl Â· GitHub

Iâ€™d like to do essentially the same thing. Iâ€™d like to set the color using the color map (based on a variable that varies between 0 and 1, but Iâ€™d like to vary the opacity so that early points are transparent and late points are opaque.
[imagine the first makie example here:

but the â€śtrailâ€ť of the trajectory slowly fades. Note that this example seems to fade, but that is just an artifact of the colormap. If you use a different colormap (that doesnâ€™t end in black), it wonâ€™t appear that way.]

Thanks for the pointer. I still canâ€™t figure out how to modify the Lorenz example to use a color map AND opacity at the same time. I donâ€™t know how to modify the `Observable` for colors.