How to add labels as percentages to the lattice stacked bar charts in R?

流过昼夜 提交于 2019-12-08 06:49:41

问题


I have created some stacked bar charts with the likert function from the HH package, that uses lattice. Now I want to add labels represented as percentages inside to each segment of the charts, or, better, only to that segments that have a sufficient width for that. How to do this? I mention that my data are represented as frequencies, not as percentages.

My data:

ssb <- structure(list(`Strongly Disagree` = c(2L, 1L), `Moderate Disagree` = 1:2, 
    `Slightly Disagree` = c(3L, 1L), `Slightly Agree` = c(1L, 
    5L), `Moderate Agree` = 4:5, `Strongly Agree` = c(9L, 6L), 
    Grup = c("Experimental grup", "Control grup")), .Names = c("Strongly Disagree", 
"Moderate Disagree", "Slightly Disagree", "Slightly Agree", "Moderate Agree", 
"Strongly Agree", "Grup"), row.names = c("1", "2"), class = "data.frame")

My code:

library(HH)
ppi <- 150
jpeg("ssb_%02d.jpg", width=7*ppi, height=4*ppi, res=ppi)

plot_obj <- likert(Grup ~ . | Grup, data = ssb, as.percent = TRUE, positive.order = TRUE,
    main="", xlab=list(label="Percent", cex=1.1),
    ylab="", ylab.right = list("Subjects per group", cex=1.1),
    scales = list(y = list(relation = "free", labels=""), cex=1.1),
    layout = c(1, 2), auto.key=list(space="bottom", columns=3, title="", cex=1.1))

print(plot_obj)

dev.off()

回答1:


Thanks to Deepayan Sarkar, this question was solved:

library(HH)
library(latticeExtra)
ppi <- 150
jpeg("ssb_%02d.jpg", width=7*ppi, height=4*ppi, res=ppi)

plot_obj <- likert(Grup ~ . | Grup, data = ssb, as.percent = TRUE, positive.order = TRUE,
    main="", xlab=list(label="Percent", cex=1.1),
    ylab="", ylab.right = list("Subjects per group", cex=1.1),
    scales = list(y = list(relation = "free", labels=""), cex=1.1),
    layout = c(1, 2), auto.key=list(space="bottom", columns=3, title="", cex=1.1))

plot_obj <- plot_obj +
    layer({
        id = which(x > 0)
        xx = 0.5 * (cumsum(x[id]) + cumsum(c(0, x[id][-length(id)])))
        panel.text(xx, y[id], labels = paste(x[id], "%", sep = ""))
        id = which(x < 0)
        xx = 0.5 * (cumsum(x[id]) + cumsum(c(0, x[id][-length(id)])))
        panel.text(xx, y[id], labels = paste(-x[id], "%", sep = ""))
    })

print(plot_obj)

dev.off()


来源:https://stackoverflow.com/questions/28489321/how-to-add-labels-as-percentages-to-the-lattice-stacked-bar-charts-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!