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
______________________________________________
R-help@r-project.org 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.