我正在尝试部分倾斜一些标签,但仍然具有sum()
函数,但我不知道该怎么做:
library(ggplot2)
library(reshape2)
iris_mean <- aggregate(iris[,1:4], by=list(Species=iris$Species), FUN=mean)
iris_sd <- aggregate(iris[,1:4], by=list(Species=iris$Species), FUN=sd)
df_mean <- melt(iris_mean, id.vars=c("Species"), variable.name = "Samples", value.name="Values")
df_sd <- melt(iris_sd, id.vars=c("Species"), variable.name = "Samples", value.name="Values")
limits <- aes(ymax = df_mean[,"Values"] + df_sd[,"Values"], ymin=df_mean[,"Values"] - df_sd[,"Values"])
df_mean$Species <- factor(df_mean$Species, levels=unique(df_mean$Species), ordered=TRUE)
ggplot(df_mean, aes(Samples, Values, fill = Species)) +
geom_bar(position="dodge", stat="identity") + coord_flip() +
theme(axis.text.y=element_text(angle=0, hjust=1)) +
theme_minimal() +
theme(
legend.position = "bottom",
plot.margin = unit(c(1,1,.5,0),"cm"),
legend.key.size = unit(.5, "lines"),
axis.text.y = element_text(face = "italic")
) +
scale_x_discrete("",
labels= expression(
paste(italic("I. setosa"), " (n=", sum(iris == "setosa"), ")"),
paste(italic("I. versicolor"), " (n=", sum(iris == "versicolor"), ")"),
paste(italic("I. virginica"), " (n=", sum(iris == "virginica"), ")")))
当前情节:所需图
最佳答案
只要看看scale_x_discrete,您就可以
scale_x_discrete("",
labels= c(
bquote(italic("I. setosa")*" (n="*.(sum(iris == "setosa")) * ")"),
bquote(italic("I. versicolor")*" (n="*.(sum(iris == "versicolor")) * ")"),
bquote(italic("I. virginica")*" (n="*.(sum(iris == "virginica")) * ")")))
在这里,我们使用
bquote()
将值“插入”表达式中。我们使用.()
调用内的bquote()
函数来执行此操作,该函数在当前环境中评估表达式并将该值插入表达式中。您可以使用以下命令自动创建它们
x <- c("setosa", "versicolor", "virginica")
xlabels <- lapply(x, function(spec) {
bquote(italic(.(paste("I.", spec)))*" (n="*.(sum(iris == spec)) * ")")
})
然后使用
+ scale_x_discrete("", labels= xlabels)