Order axis by number of entries in lattice plot

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

Order axis by number of entries in lattice plot

Luigi
Dear all,
I am plotting some values with lattice barchart: the y-axis is
automatically ordered alphabetically; is it possible to order the
entries by number, so that the 'larger' histograms would be at the top
of the plot?
This is a working example

```
library(lattice)
Family = c("Adenoviridae", "Baculoviridae",  "Herpesviridae",   "Mimiviridae",
"Myoviridae", "Pandoraviridae",  "Phycodnaviridae", "Podoviridae",
"Polydnaviridae",  "Retroviridae", "Siphoviridae",    "Unassigned")
Normal = c(7, 15, 24,  8, 65, 24, 17, 16,  8, 15, 49 , 9)
Tumour =c(  17,  75,  94,  14, 242,  28,  41,  69,  12,  11, 305,  51)
Metastasis =c(41,  66,  95,   3, 173,  22,  33, 101,  12,  12, 552,  57)
df = data.frame(Family, Normal, Tumour, Metastasis, stringsAsFactors = FALSE)
COLS = c("darkolivegreen3", "brown3", "darkorchid3")
barchart(Family ~ Normal+Tumour+Metastasis, data = df, stack = TRUE,
         xlim=c(1,1000),
         main = "Alphabetical order",
         xlab = expression(bold("Number of species")),
         ylab = expression(bold("Families")),
         auto.key = list(space = "top", columns=3),
         par.settings = list(superpose.polygon = list(col = COLS)))
```


--
Best regards,
Luigi

______________________________________________
[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: Order axis by number of entries in lattice plot

Duncan Murdoch-2
On 04/11/2019 8:31 a.m., Luigi Marongiu wrote:

> Dear all,
> I am plotting some values with lattice barchart: the y-axis is
> automatically ordered alphabetically; is it possible to order the
> entries by number, so that the 'larger' histograms would be at the top
> of the plot?
> This is a working example
>
> ```
> library(lattice)
> Family = c("Adenoviridae", "Baculoviridae",  "Herpesviridae",   "Mimiviridae",
> "Myoviridae", "Pandoraviridae",  "Phycodnaviridae", "Podoviridae",
> "Polydnaviridae",  "Retroviridae", "Siphoviridae",    "Unassigned")
> Normal = c(7, 15, 24,  8, 65, 24, 17, 16,  8, 15, 49 , 9)
> Tumour =c(  17,  75,  94,  14, 242,  28,  41,  69,  12,  11, 305,  51)
> Metastasis =c(41,  66,  95,   3, 173,  22,  33, 101,  12,  12, 552,  57)
> df = data.frame(Family, Normal, Tumour, Metastasis, stringsAsFactors = FALSE)
> COLS = c("darkolivegreen3", "brown3", "darkorchid3")
> barchart(Family ~ Normal+Tumour+Metastasis, data = df, stack = TRUE,
>           xlim=c(1,1000),
>           main = "Alphabetical order",
>           xlab = expression(bold("Number of species")),
>           ylab = expression(bold("Families")),
>           auto.key = list(space = "top", columns=3),
>           par.settings = list(superpose.polygon = list(col = COLS)))
> ```
>
>

You could do it by using an ordered factor.  For example,

o <- order(Normal + Tumour + Metastasis)
df$Ordered <- ordered(Family, levels = Family[o])
barchart(Ordered ~ Normal+Tumour+Metastasis, data = df, stack = TRUE,
          xlim=c(1,1000),
          main = "Ordered by total",
          xlab = expression(bold("Number of species")),
          ylab = expression(bold("Families")),
          auto.key = list(space = "top", columns=3),
          par.settings = list(superpose.polygon = list(col = COLS)))

Duncan Murdoch

______________________________________________
[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: Order axis by number of entries in lattice plot

Duncan Murdoch-2
On 04/11/2019 9:25 a.m., Duncan Murdoch wrote:

> On 04/11/2019 8:31 a.m., Luigi Marongiu wrote:
>> Dear all,
>> I am plotting some values with lattice barchart: the y-axis is
>> automatically ordered alphabetically; is it possible to order the
>> entries by number, so that the 'larger' histograms would be at the top
>> of the plot?
>> This is a working example
>>
>> ```
>> library(lattice)
>> Family = c("Adenoviridae", "Baculoviridae",  "Herpesviridae",   "Mimiviridae",
>> "Myoviridae", "Pandoraviridae",  "Phycodnaviridae", "Podoviridae",
>> "Polydnaviridae",  "Retroviridae", "Siphoviridae",    "Unassigned")
>> Normal = c(7, 15, 24,  8, 65, 24, 17, 16,  8, 15, 49 , 9)
>> Tumour =c(  17,  75,  94,  14, 242,  28,  41,  69,  12,  11, 305,  51)
>> Metastasis =c(41,  66,  95,   3, 173,  22,  33, 101,  12,  12, 552,  57)
>> df = data.frame(Family, Normal, Tumour, Metastasis, stringsAsFactors = FALSE)
>> COLS = c("darkolivegreen3", "brown3", "darkorchid3")
>> barchart(Family ~ Normal+Tumour+Metastasis, data = df, stack = TRUE,
>>            xlim=c(1,1000),
>>            main = "Alphabetical order",
>>            xlab = expression(bold("Number of species")),
>>            ylab = expression(bold("Families")),
>>            auto.key = list(space = "top", columns=3),
>>            par.settings = list(superpose.polygon = list(col = COLS)))
>> ```
>>
>>
>
> You could do it by using an ordered factor.  For example,
>
> o <- order(Normal + Tumour + Metastasis)
> df$Ordered <- ordered(Family, levels = Family[o])
> barchart(Ordered ~ Normal+Tumour+Metastasis, data = df, stack = TRUE,
>            xlim=c(1,1000),
>            main = "Ordered by total",
>            xlab = expression(bold("Number of species")),
>            ylab = expression(bold("Families")),
>            auto.key = list(space = "top", columns=3),
>            par.settings = list(superpose.polygon = list(col = COLS)))
>
> Duncan Murdoch
>

Sorry, I meant to add:  you don't need to use an ordered factor for the
plot.  A regular factor with the levels in the order you want is fine,
i.e. you could use

df$Ordered <- factor(Family, levels = Family[o])

However, there are some other operations (e.g. comparison using ">")
that do require the ordered factor.

Duncan Murdoch

______________________________________________
[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: Order axis by number of entries in lattice plot

Richard M. Heiberger
In reply to this post by Luigi
## The likert function would work well for this example.
## Continuing from your example

## install.packages("HH") ## if necessary
library(HH)

likert(Family ~ Normal+Tumour+Metastasis, data = df,
       main = "likert, data-order, ReferenceZero=0\nDuplicates your example",
       ReferenceZero=0,
       as.table=FALSE,
       xlab = expression(bold("Number of species")),
       ylab = expression(bold("Families")),
       auto.key = list(space = "top", columns=3),
       col = COLS)

likert(Family ~ Normal+Tumour+Metastasis, data = df,
       main = "likert, positive.order=TRUE, ReferenceZero=0\nThis is
what you asked for",
       positive.order=TRUE,
       ReferenceZero=0,
       xlab = expression(bold("Number of species")),
       ylab = expression(bold("Families")),
       auto.key = list(space = "top", columns=3),
       col = COLS)

likert(Family ~ Normal+Tumour+Metastasis, data = df,
       main = "likert, positive.order=TRUE, ReferenceZero=1.5\nThis
puts Normal on left and not-Normal on right",
       positive.order=TRUE,
       ReferenceZero=1.5,
       xlab = expression(bold("Number of species")),
       ylab = expression(bold("Families")),
       auto.key = list(space = "top", columns=3),
       col = COLS)

## For information on the likert function
?likert

## For more examples
demo("likert-paper", package="HH")

## for the paper, open
http://www.jstatsoft.org/v57/i05/
## and click on
##       Download PDF

On Mon, Nov 4, 2019 at 8:32 AM Luigi Marongiu <[hidden email]> wrote:

>
> Dear all,
> I am plotting some values with lattice barchart: the y-axis is
> automatically ordered alphabetically; is it possible to order the
> entries by number, so that the 'larger' histograms would be at the top
> of the plot?
> This is a working example
>
> ```
> library(lattice)
> Family = c("Adenoviridae", "Baculoviridae",  "Herpesviridae",   "Mimiviridae",
> "Myoviridae", "Pandoraviridae",  "Phycodnaviridae", "Podoviridae",
> "Polydnaviridae",  "Retroviridae", "Siphoviridae",    "Unassigned")
> Normal = c(7, 15, 24,  8, 65, 24, 17, 16,  8, 15, 49 , 9)
> Tumour =c(  17,  75,  94,  14, 242,  28,  41,  69,  12,  11, 305,  51)
> Metastasis =c(41,  66,  95,   3, 173,  22,  33, 101,  12,  12, 552,  57)
> df = data.frame(Family, Normal, Tumour, Metastasis, stringsAsFactors = FALSE)
> COLS = c("darkolivegreen3", "brown3", "darkorchid3")
> barchart(Family ~ Normal+Tumour+Metastasis, data = df, stack = TRUE,
>          xlim=c(1,1000),
>          main = "Alphabetical order",
>          xlab = expression(bold("Number of species")),
>          ylab = expression(bold("Families")),
>          auto.key = list(space = "top", columns=3),
>          par.settings = list(superpose.polygon = list(col = COLS)))
> ```
>
>
> --
> Best regards,
> Luigi
>
> ______________________________________________
> [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.
Reply | Threaded
Open this post in threaded view
|

Re: Order axis by number of entries in lattice plot

Luigi
Thank you. the factor approach worked all right. Thank you for Likert
also: I already used it but here I wanted to run with lattice only.
Best regards

On Mon, Nov 4, 2019 at 6:57 PM Richard M. Heiberger <[hidden email]> wrote:

>
> ## The likert function would work well for this example.
> ## Continuing from your example
>
> ## install.packages("HH") ## if necessary
> library(HH)
>
> likert(Family ~ Normal+Tumour+Metastasis, data = df,
>        main = "likert, data-order, ReferenceZero=0\nDuplicates your example",
>        ReferenceZero=0,
>        as.table=FALSE,
>        xlab = expression(bold("Number of species")),
>        ylab = expression(bold("Families")),
>        auto.key = list(space = "top", columns=3),
>        col = COLS)
>
> likert(Family ~ Normal+Tumour+Metastasis, data = df,
>        main = "likert, positive.order=TRUE, ReferenceZero=0\nThis is
> what you asked for",
>        positive.order=TRUE,
>        ReferenceZero=0,
>        xlab = expression(bold("Number of species")),
>        ylab = expression(bold("Families")),
>        auto.key = list(space = "top", columns=3),
>        col = COLS)
>
> likert(Family ~ Normal+Tumour+Metastasis, data = df,
>        main = "likert, positive.order=TRUE, ReferenceZero=1.5\nThis
> puts Normal on left and not-Normal on right",
>        positive.order=TRUE,
>        ReferenceZero=1.5,
>        xlab = expression(bold("Number of species")),
>        ylab = expression(bold("Families")),
>        auto.key = list(space = "top", columns=3),
>        col = COLS)
>
> ## For information on the likert function
> ?likert
>
> ## For more examples
> demo("likert-paper", package="HH")
>
> ## for the paper, open
> http://www.jstatsoft.org/v57/i05/
> ## and click on
> ##       Download PDF
>
> On Mon, Nov 4, 2019 at 8:32 AM Luigi Marongiu <[hidden email]> wrote:
> >
> > Dear all,
> > I am plotting some values with lattice barchart: the y-axis is
> > automatically ordered alphabetically; is it possible to order the
> > entries by number, so that the 'larger' histograms would be at the top
> > of the plot?
> > This is a working example
> >
> > ```
> > library(lattice)
> > Family = c("Adenoviridae", "Baculoviridae",  "Herpesviridae",   "Mimiviridae",
> > "Myoviridae", "Pandoraviridae",  "Phycodnaviridae", "Podoviridae",
> > "Polydnaviridae",  "Retroviridae", "Siphoviridae",    "Unassigned")
> > Normal = c(7, 15, 24,  8, 65, 24, 17, 16,  8, 15, 49 , 9)
> > Tumour =c(  17,  75,  94,  14, 242,  28,  41,  69,  12,  11, 305,  51)
> > Metastasis =c(41,  66,  95,   3, 173,  22,  33, 101,  12,  12, 552,  57)
> > df = data.frame(Family, Normal, Tumour, Metastasis, stringsAsFactors = FALSE)
> > COLS = c("darkolivegreen3", "brown3", "darkorchid3")
> > barchart(Family ~ Normal+Tumour+Metastasis, data = df, stack = TRUE,
> >          xlim=c(1,1000),
> >          main = "Alphabetical order",
> >          xlab = expression(bold("Number of species")),
> >          ylab = expression(bold("Families")),
> >          auto.key = list(space = "top", columns=3),
> >          par.settings = list(superpose.polygon = list(col = COLS)))
> > ```
> >
> >
> > --
> > Best regards,
> > Luigi
> >
> > ______________________________________________
> > [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.



--
Best regards,
Luigi

______________________________________________
[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.