我正在尝试部分倾斜一些标签,但仍然具有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"), ")")))
当前情节:
r - 如何让函数在expression()中正常执行?-LMLPHP
所需图
r - 如何让函数在expression()中正常执行?-LMLPHP

最佳答案

只要看看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)

07-28 03:53
查看更多