[R] Scatterplot with the 3rd dimension = color?

Kerry kbrownk at gmail.com
Fri Oct 21 19:08:22 CEST 2011


Awesome, thank you so much for this! I plan to play around with this
more next week with my actual data, but it provides a lot more options
than I had before I posted. The link will help too.

kb

On Oct 20, 8:18 pm, Dennis Murphy <djmu... at gmail.com> wrote:
> AFAIK, you can't 'add' two ggplot2 graphs together; the problem in
> this case is that the two color scales would clash. If you're willing
> to discretize the z values, then you could pull it off. Here's an
> example:
>
> d <- data.frame(x = rnorm(100), y = rnorm(100), z = factor(1 +
> (rnorm(100) > 0)))
> d1 <- data.frame(x = rnorm(100), y = rnorm(100), z = factor(3 +
> (rnorm(100) > 0)))
> dd <- rbind(d, d1)
>
> In each data frame, I'm assigning two factor levels depending on
> whether z > 0 or not. The factor levels are 1, 2 in d and 3, 4 in d1;
> when rbinded together, z has four distinct levels. Now call ggplot():
>
> ggplot(dd, aes(x = x, y = y, colour = z)) + geom_point() +
>    scale_colour_manual(values = c('1' = 'red', '2' = 'blue', '3' = 'green',
>                                   '4' = 'yellow'))
>
> This may be coarser than you like, so you could always use the cut()
> function to discretize z in each data frame; you'll want to assign the
> levels so that they are distinct in the combined data frame. Example:
>
> d3 <- data.frame(x = rnorm(100), y = rnorm(100),
>                  z = cut(rnorm(100), breaks = c(-Inf, -0.5, 0.5, Inf),
> labels = 1:3))
> d4 <- data.frame(x = rnorm(100), y = rnorm(100),
>                  z = cut(rnorm(100), breaks = c(-Inf, -0.5, 0.5, Inf),
> labels = 4:6))
> dd2 <- rbind(d3, d4)
>
> mycols <- c('red', 'maroon', 'blue', 'green', 'cyan', 'yellow')
> ggplot(dd2, aes(x = x, y = y, colour = z)) + geom_point() +
>    scale_colour_manual(breaks = levels(dd2$z),
>                        values = mycols)
>
> You can always use the labels = argument of scale_colour_manual() to
> assign more evocative legend values, or equivalently, you can assign
> the labels in the cut() function within d3 and d4 to those you want in
> the legend and leave the plot code as is.
>
> BTW, there is a dedicated ggplot2 list to which you can subscribe
> throughhttp://had.co.nz/ggplot2/(look for the ggplot2 mailing list
> near the top of the page). The list archives are accessible through
> the same link.
>
> HTH,
> Dennis
>
>
>
>
>
>
>
>
>
> On Thu, Oct 20, 2011 at 12:25 PM, Kerry <kbro... at gmail.com> wrote:
> > Can someone please help me out with this? The ggplot2 suggestion works
> > great but I've spent a few days trying to figure out how to plot 2
> > variables with it and I'm stuck. Here's my example code:
>
> > library(ggplot2)
> > #Here's the 1st plot
> > x<-rnorm(100)
> > y<-rnorm(100)
> > z<-rnorm(100)
> > d <- data.frame(x,y,z)
> > dg<-qplot(x,y,colour=z,data=d)
> > dg + scale_colour_gradient(low="red", high="blue")
>
> > #Here's the 2nd plot which will delete the 1st plot above but I'd
> > like
> > them to be plotted together
> > x1<-rnorm(100)
> > y2<-rnorm(100)
> > z3<-rnorm(100)
> > d1 <- data.frame(x1,y1,z1)
> > dg1 <-qplot(x1,y1,colour=z1,data=d1)
> > dg1 + scale_colour_gradient(low="green", high="yellow")
>
> > I've been trying to get long format working but it just doesn't make
> > any sense to me.
>
> > Thanks,
> > kb
>
> > On Oct 17, 3:10 pm, Kerry <kbro... at gmail.com> wrote:
> >> Yes, the qplot works great, but do you know how to allow for multiple
> >> plots? I want one variable to be plotted say from blue to red and
> >> another say from yellow to green but in the same graph, each having
> >> there own separate legends. I've tried print() and arrange() but no
> >> luck.
>
> >> Thanks again,
> >> kb
>
> >> On Oct 2, 10:42 pm, Ben Bolker <bbol... at gmail.com> wrote:
>
> >> > Duncan Murdoch <murdoch.duncan <at> gmail.com> writes:
>
> >> > > On 11-10-02 1:11 PM, Kerry wrote:
> >> > > > I have 3 columns of data and want to plot each row as a point in a
> >> > > > scatter plot and want one column to be represented as a color gradient
> >> > > > (e.g. larger  values being more red). Anyone know the command or
> >> > > > package for this?
>
> >> > > It's not a particularly effective display, but here's how to do it.  Use
> >> > > rainbow(101) in place of rev(heat.colors(101)) if you like.
>
> >> > > x <- rnorm(10)
> >> > > y <- rnorm(10)
> >> > > z <- rnorm(10)
> >> > > colors <- rev(heat.colors(101))
> >> > > zcolor <- colors[(z - min(z))/diff(range(z))*100 + 1]
> >> > > plot(x,y,col=zcolor)
>
> >> >   or
>
> >> > d <- data.frame(x,y,z)
> >> > library(ggplot2)
> >> > qplot(x,y,colour=z,data=d)
>
> >> >   I agree about the "not particularly effective display"
> >> > comment, but if you have two continuous predictors and
> >> > a continuous response you've got a tough display problem --
> >> > your choices are:
>
> >> >   1. use color, size, or some other graphical characteristic
> >> > (pretty far down on the "Cleveland hierarchy")
> >> >   2. use a perspective plot (hard to get the right viewing
> >> > angle, often confusing)
> >> >   3. use coplots/small multiples/faceting (requires
> >> > discretizing one dimension)
>
> >> > ______________________________________________
> >> > R-h... at r-project.org mailing listhttps://stat.ethz.ch/mailman/listinfo/r-help
> >> > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
> >> > and provide commented, minimal, self-contained, reproducible code.
>
> >> ______________________________________________
> >> R-h... at r-project.org mailing listhttps://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
>
> > ______________________________________________
> > R-h... at r-project.org mailing list
> >https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-h... at r-project.org mailing listhttps://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list