[R] Colour makes my life; but not my bwplot (panel.violin)

Deepayan Sarkar deepayan.sarkar at gmail.com
Fri Apr 1 16:29:32 CEST 2011


On Fri, Mar 25, 2011 at 3:59 PM, JP <jeanpaul.ebejer at inhibox.com> wrote:
> Hi there David,
>
> Many thanks for your time and reply
>
> I created a small test set, and ran your proposed solution... and this is
> what I get http://i.imgur.com/vlsSQ.png
> This is not what I want - I want separate grp_1 and grp_2 panels and in each
> panel a red violin plot and a blue one.  So like this -->
> http://i.imgur.com/NnsE0.png but with red for condition_a and blue for
> condition_b.  You would think that something like this is trivial to
> achieve... I just spent a whole day on this :((  Maybe I am just thick
>
> I included the test data I am using:
>
> # some dummy data
> p <- rep(c(rep("condition_a", 4), rep("condition_b", 4)), 2)
> q <- c(rep("grp_1", 8), rep("grp_2", 8))
> r <- rnorm(16)
> test_data <- data.frame(p, q, r)
>
> # your solution
> bwplot(r ~ p,
>   groups = q,
>   data=test_data,
>   col = c("red", "blue"),
>   panel=panel.superpose,
>   panel.groups = function(..., box.ratio){
> panel.violin(...,  cut = 1, varwidth = FALSE, box.ratio = box.ratio)
> panel.bwplot(...,  box.ratio = .1)
> },
> par.settings = list(plot.symbol = list(pch = 21, col = "gray"),
>    box.rectangle = list(col = "black"),   # not sure these are working
> properly
> box.umbrella = list(col = "black"))
> )

Umm, isn't this slight modification of the above what you want (only
first two lines changed -- your formula with the right 'groups'
variable)?

bwplot(r ~ p | q,
       groups = p,
       data=test_data,
       col = c("red", "blue"),
       panel=panel.superpose,
       panel.groups = function(..., box.ratio){
           panel.violin(...,  cut = 1, varwidth = FALSE, box.ratio = box.ratio)
           panel.bwplot(...,  box.ratio = .1)
       },
       par.settings = list(plot.symbol = list(pch = 21, col = "gray"),
                           box.rectangle = list(col = "black"),
                           box.umbrella = list(col = "black"))
       )

Some further modifications will get you closer to David's solution:

bwplot(r ~ p | q,
       groups = p,
       data=test_data,
       col = c("red", "blue"),
       fill = c("red", "blue"),
       panel=panel.superpose,
       panel.groups = function(..., box.ratio, col, pch){
           panel.violin(...,  cut = 1, varwidth = FALSE, box.ratio =
box.ratio, col = col)
           panel.bwplot(...,  box.ratio = .1, col = "black", pch = 16)
       },
       par.settings = list(plot.symbol = list(pch = 21, col = "gray"),
                           box.rectangle = list(col = "black"),
                           box.umbrella = list(col = "black"))
       )

-Deepayan

> # my non working one for completeness
>
> bwplot(r ~ p | q,
> data=test_data,
> col = c("red", "blue"),
> panel = function(..., box.ratio){
> panel.violin(...,  cut = 1, varwidth = FALSE, box.ratio = box.ratio)
> panel.bwplot(...,  box.ratio = .1)
> },
> par.settings = list(plot.symbol = list(pch = 21, col = "gray"),
> box.rectangle = list(col = "black"),   # not sure these are working properly
> box.umbrella = list(col = "black"))
> )
>
>
> On 24 March 2011 21:59, David Winsemius <dwinsemius at comcast.net> wrote:
>
>>
>> On Mar 24, 2011, at 1:37 PM, JP wrote:
>>
>>  Using Trellis, am successfully setting up a number of panels (25) in which
>>> I
>>> have two box and violin plots.
>>>
>>> I would like to colour - one plot as RED and the other as BLUE (in each
>>> panel).  I can do that with the box plots, but the violin density areas
>>> just
>>> take on one colour.
>>>
>>> My basic call is as follows:
>>>
>>>
>> I took the suggestion of Sarkar's:
>> http://finzi.psych.upenn.edu/Rhelp10/2010-April/234191.html
>>
>> Identified with a search on: " panel.violin color"
>>
>> .... a bit of trial and error with a re-worked copy of the `singer`
>> data.frame meant I encountered errors and needed to throw out some of your
>> pch arguments, and suggest this reworking of your code:
>>
>>
>> bwplot(rmsd ~ file , groups= code,
>>   data=spread_data.filtered, col = c("red", "blue"),
>>    panel=panel.superpose,
>>     panel.groups = function(..., box.ratio){
>>       panel.violin(...,  cut = 1, varwidth = FALSE,
>>                       box.ratio = box.ratio)
>>       panel.bwplot(...,  box.ratio = .1)
>>
>>       },
>>   par.settings = list(plot.symbol = list(pch = 21, col = "gray"),
>>   box.rectangle = list(col = "black"),   # not sure these are working
>> properly
>>
>>   box.umbrella = list(col = "black"))
>> )
>>
>> Obviously it cannot be tested without some data, but I did get alternating
>> colors to the violin plots. There is an modifyList functionthat you might
>> want to look up in the archives for changing par.settings:
>>
>>
>> http://search.r-project.org/cgi-bin/namazu.cgi?query=par.settings+modifyList&max=100&result=normal&sort=score&idxname=functions&idxname=Rhelp08&idxname=Rhelp10&idxname=Rhelp02
>>
>>
>> --
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>>
>
>
> --
>
> Jean-Paul Ebejer
> Early Stage Researcher
>
> InhibOx Ltd
> Pembroke House
> 36-37 Pembroke Street
> Oxford
> OX1 1BP
> UK
>
> (+44 / 0) 1865 262 034
>
>
>
> This email and any files transmitted with it are confide...{{dropped:22}}
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>



More information about the R-help mailing list