Plotting overlaying fields in different colors.
nathanLaubeuf opened this issue · 4 comments
Cannot plot fields wrapped with vis.overlay
in different colors since f03e6bd.
This used to be supported when color
was an attribute of the field.
Can it be fixed, maybe with a different indexing of vis.plot
's color
argument?
The easiest way to do it is to stack your data along a channel dimension that is not called 'vector'.
Then the different components will automatically get different colors.
plot(CenteredGrid(Noise(colors='col1,col2'), x_axis=10))
plot(math.random_uniform(instance(x=10), channel(colors=2, vector='x,y')))
You can additionally specify the colors directly, either as cycle indices or via hex code:
plot(CenteredGrid(Noise(colors='col1,col2'), x_axis=10), color=wrap([2, 3], channel('colors')))
plot(math.random_uniform(instance(x=10), channel(colors=2, vector='x,y')), color=wrap(["#000000", "#FF0000"], channel('colors')))
Does that solve your issue?
No luck there. I'm trying to plot 3 populations of points with different sizes.
rock = math.random_uniform(instance(x=10), channel(vector='x,y'))
paper = math.random_uniform(instance(x=5), channel(vector='x,y'))
scissors = math.random_uniform(instance(x=7), channel(vector='x,y'))
particles = math.stack((rock, paper, scissors), channel(colors=3))
vis.plot(particles, color=wrap(["#0000FF", "#FF0000", "#00FF00"], channel(colors=3)))
This snippet breaks with a NotImplementedError from particles
being a non-uniform tensor.
Okay, I got it to work by replacing math.stack
by math.layout
.
This runs on the latest develop
version at least.
The stack version unfortunately results in non-uniform tensors for which not all operations are supported yet.
The layout is basically just like a list with a named dimension.
That fixed it. Thanks!