[R] best practise for organizing data for ggplot faceting?
B. Bogart
bbogart at sfu.ca
Fri Feb 22 20:35:58 CET 2008
Hello all,,
What is the best practise for organizing data for easy ggplot faceting?
Right now I have a list of data.frames, each being an image. I can plot
them with geom_tile separately, but as a list of data.frames I see no
easy way to facet. For this kind of data what is the best practise to
organize it for faceting?
Here is what I have now.
(note the data originally comes from a huge dataframe with the RGBA
values for each 7500 pixels has its own variable.
som_images <- list()
for (unit in seq(1:36)) {
print(unit)
som_image <- expand.grid(x=1:100,y=1:75)
som_image$r <- as.numeric(som_weights[unit,seq(1,30000,4)])
som_image$g <- as.numeric(som_weights[unit,seq(2,30000,4)])
som_image$b <- as.numeric(som_weights[unit,seq(3,30000,4)])
som_image$rgb <- rgb(som_image$r,som_image$g,som_image$b)
som_images[[unit]] <- som_image
}
qplot(x, y, data=som_images[[1]], geom="tile", fill=rgb) +
scale_fill_identity() + opts(aspect.ratio = .75)
I would like to facet so each "som_image" is in a 6x6 matrix (0 in the
lower left, 36 in the upper right)
Thanks so much for your time,
B. Bogart
hadley wickham wrote:
> Probably the easiest thing is to do:
>
> df$rgb <- with(data, rgb(r, g, b)
> qplot(x,y,data=df,fill=rgb) + scale_fill_identity()
>
> That creates a new variable that stores that actual colour, and then
> tells ggplot to use the raw value, not to scale it in anyway.
>
> Hadley
>
> On Wed, Feb 20, 2008 at 2:41 PM, B. Bogart <bbogart at sfu.ca> wrote:
>> Hello Hadley,
>>
>> I have to say ggplot2 was worth the upgrade! I'm really enjoying the
>> approach and wondering what I did with the base graphics.
>>
>> Anyhow I've looked over the documentation and scales, and read through
>> the book section on the website and I still can't see how to apply my
>> RGB channels to the fill of tiles in a plot.
>>
>> I'm working with a simple test case with 6x6 items, each with RGB
>> components, ranging from 0 to 1.
>>
>> df <- expand.grid(x=1:6,y=1:6) # position of items in grid
>> df$r <- c(rep(1,12),rep(0,24))
>> df$g <- c(rep(0,12),rep(1,12),rep(0,12))
>> df$b <- c(rep(0,24),rep(1,12))
>>
>> gives me three groups of values, each pure red, green and blue.
>>
>> So if that is the data, how can I make a geom_tile plot where each tile
>> is coloured using the rgb components from the dataframe? I imagine
>> something like:
>>
>> qplot(x,y,data=df,fill=rgb(r=r,g=g,b=b))
>>
>> where rgb() would be some function to combine the components into
>> individual colours understood for tile filling.
>>
>> The only way I've been able to see how to specify colours are using the
>> raw values and having the qplot scale figure out the mapping, or
>> specifying the character colour for each element. Is there a way of
>> supplying colour components?
>>
>> Thanks for your time,
>>
>>
>> B. Bogart
>>
>> hadley wickham wrote:
>> > You'll need 2.6.1.
>> > Hadley
>> >
>> > On Feb 5, 2008 3:12 PM, B. Bogart <bbogart at sfu.ca> wrote:
>> >> I'm using the r-cran R debian packages.
>> >>
>> >> R.Version() tells me:
>> >>
>> >> "R version 2.4.0 Patched (2006-11-25 r39997)"
>> >>
>> >> What is the min required version to use ggplot2?
>> >>
>> >>
>> >> Thanks,
>> >> B. Bogart
>> >>
>> >> hadley wickham wrote:
>> >>> You'll need to make sure you have a recent version of R - what
>> >>> version are you using?
>> >>>
>> >>> Hadley
>> >>>
>> >>> On Feb 5, 2008 1:45 PM, B. Bogart <bbogart at sfu.ca> wrote:
>> >>>
>> >>>> Hello Hadley,
>> >>>>
>> >>>> ggplot2 looks great!
>> >>>>
>> >>>> "install.packages("ggplot2")" did not work though, I get a message
>> >>>> saying the package is not available in the repos. I choose the nearest
>> >>>> mirror (Canada (BC)), could that mirror be out of date?
>> >>>>
>> >>>> I did not see any debian packages for ggplot2.
>> >>>>
>> >>>> Thanks,
>> >>>> B. Bogart
>> >>>>
>> >>>>
>> >>>>
>> >>>> hadley wickham wrote:
>> >>>>
>> >>>>>> I'm now using image() to show image data (in my case dumps of SOM
>> >>>>>> weights) but would like to show RGB colour data, not just single "z"
>> >>>>>> colour values.
>> >>>>>>
>> >>>>> You can do this fairly readily with ggplot2:
>> >>>>>
>> >>>>> install.packages("ggplot2")
>> >>>>> library(ggplot2)
>> >>>>> qplot(x, y, data=mydata, fill=rgb, geom="tile") + scale_fill_identity()
>> >>>>>
>> >>>>> (assuming that your variable containing the rgb colour is called rgb)
>> >>>>>
>> >>>>> If your data is originally in the matrix form used by image, see the
>> >>>>> examples on http://had.co.nz/ggplot2/geom_tile.html on how to change
>> >>>>> to the data.frame form used by ggplot.
>> >>>>>
>> >>>>> Hadley
>> >>>>>
>> >>>>>
>> >>>
>> >>>
>> >>>
>> >>
>> >
>> >
>> >
>>
>>
>
>
>
More information about the R-help
mailing list