[R] Order axis by number of entries in lattice plot
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Mon Nov 4 15:32:40 CET 2019
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
More information about the R-help
mailing list