How to set scale of color scatterplot points relative to a third variable?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

How to set scale of color scatterplot points relative to a third variable?

R help mailing list-2
Hello Kind and Generous Volunteers,

I'm trying to use a scatter plot to visualize three variables: time, radius, and intensity. I would like each point on the scatterplot to be colored according to a gradient, in which red indicates an intensity less than 1, white indicates an intensity of 1, and green indicates an intensity more than 1.

```
#A1 scatter plot

colors <- c("firebrick2", "white", "darkolivegreen3")
class <- classIntervals(A1.matrix[,3], 10) #A1.matrix[,3] is "Intensity"
colorcode <- findColours(class, colors)
plot(A1.matrix[,1], A1.matrix[,2]) #A1.matrix[,1] is "Time" and A1.matrix[,2] is "Radius"
points(A1.matrix[,1], A1.matrix[,2], pch = 19, col = colorcode)

```

It is very close to what I am looking for. Firebrick2 and darkolivegreen3 correspond to the minimum and maximum values in A1.matrix[,3] respectively. But white does not correspond to 1. How can I set white equal to 1?


Ideally, the graph would also have a color bar scale to show what the min and max values are. I’ve read that findColours returns two attributes for use in constructing a legend, but I haven’t been able to find much more information than that.

I've had success doing something similar with a levelplot heatmap, using at=unique as shown below. However, I just copied that from somewhere online and it doesn't seem to work in the points function, I can’t find it using help() or google, and I'm not sure how it works or if it could somehow be applied. The colorbar scale is automatically part of the graph with levelplot.

```
#A1 heat map

levelplot(nbin.A1, cuts = 50, at= unique(c(seq(A1min,1, length = 100), seq(1,A1max, length=100))), col.regions = colorRampPalette(c("firebrick2", "white", "darkolivegreen3"))(1e3), xlab = "Radius (Microns)", ylab = "Time")

```

Thank you for reading! Your volunteer work is SO appreciated!!

Best,
Sarah Flaherty

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: How to set scale of color scatterplot points relative to a third variable?

Jim Lemon-4
Hi Sarah,
The size_n_color function in the plotrix package does something like
this. To get the colors that you want using "color.scale" in the same
package, look at the help page for that function. The values in
A1.matrix[,3] probably don't range from 0 to 2, so getting exactly
what you want can be a bit tricky with 1=white. If you can post a
representative sample of these values, it should be doable.

Jim

On Sat, Jul 6, 2019 at 2:56 AM Flaherty, Sarah (NIH/NCI) [F] via
R-help <[hidden email]> wrote:

>
> Hello Kind and Generous Volunteers,
>
> I'm trying to use a scatter plot to visualize three variables: time, radius, and intensity. I would like each point on the scatterplot to be colored according to a gradient, in which red indicates an intensity less than 1, white indicates an intensity of 1, and green indicates an intensity more than 1.
>
> ```
> #A1 scatter plot
>
> colors <- c("firebrick2", "white", "darkolivegreen3")
> class <- classIntervals(A1.matrix[,3], 10) #A1.matrix[,3] is "Intensity"
> colorcode <- findColours(class, colors)
> plot(A1.matrix[,1], A1.matrix[,2]) #A1.matrix[,1] is "Time" and A1.matrix[,2] is "Radius"
> points(A1.matrix[,1], A1.matrix[,2], pch = 19, col = colorcode)
>
> ```
>
> It is very close to what I am looking for. Firebrick2 and darkolivegreen3 correspond to the minimum and maximum values in A1.matrix[,3] respectively. But white does not correspond to 1. How can I set white equal to 1?
>
>
> Ideally, the graph would also have a color bar scale to show what the min and max values are. I’ve read that findColours returns two attributes for use in constructing a legend, but I haven’t been able to find much more information than that.
>
> I've had success doing something similar with a levelplot heatmap, using at=unique as shown below. However, I just copied that from somewhere online and it doesn't seem to work in the points function, I can’t find it using help() or google, and I'm not sure how it works or if it could somehow be applied. The colorbar scale is automatically part of the graph with levelplot.
>
> ```
> #A1 heat map
>
> levelplot(nbin.A1, cuts = 50, at= unique(c(seq(A1min,1, length = 100), seq(1,A1max, length=100))), col.regions = colorRampPalette(c("firebrick2", "white", "darkolivegreen3"))(1e3), xlab = "Radius (Microns)", ylab = "Time")
>
> ```
>
> Thank you for reading! Your volunteer work is SO appreciated!!
>
> Best,
> Sarah Flaherty
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.