【问题标题】:How to make ggplot2 plots prettier?如何使 ggplot2 绘图更漂亮?
【发布时间】:2010-08-31 07:26:25
【问题描述】:

我使用后面的 R 代码生成了以下图:

ggplot(lengths, aes(length, fill = library)) + geom_density(alpha = 0.2) + coord_cartesian(xlim = c(0, 60000)) 

现在我想让情节更漂亮一点:

  1. 使 x 轴显示长度 5000 个单位(而不是每 20000 个)
  2. 在三个之上添加 x 值 峰值(大约 3000,5000 和 35000)。

我该怎么做?

更新 回应詹姆斯:

【问题讨论】:

  • FWIW,这是一个非常性感的情节。
  • 您可以添加一条从峰到 x 轴的垂直线。 geom_segment(data = peakdat, aes(x=x, xend=x, y=y, yend=0)) 应该是诀窍,peakdat 来自 Ben B 的回答。

标签: r plot ggplot2


【解决方案1】:

怎么样:

(首先创建一个可重现的示例)

set.seed(1001)
lengths <- data.frame(length=c(rgamma(1000,shape=10,scale=500),
                    10000+rgamma(1000,shape=5,scale=700),
                    rnorm(500,mean=30000,sd=2000)),
                  library=factor(rep(2:1,c(2000,500))))

(寻找高峰位置和高度的可爱东西)

peakfun <- function(x) {
  d <- density(x$length)
  peaks <- which(diff(sign(diff(d$y)))==-2)
  data.frame(x=d$x[peaks],y=d$y[peaks])
}

peakdat <- ddply(lengths,.(library),peakfun)
peakdat <- peakdat[-1,] ## drop spurious peak

(画图)

library(ggplot2)
ggplot(lengths, aes(length, fill = library)) +
  geom_density(alpha = 0.2) +
  scale_x_continuous(limits = c(0,60000),
                     breaks = seq(0,60000,by=5000))+
  geom_text(data=peakdat,aes(x=x,y=y,label=round(x)),vjust=1)

你可能想稍微调整一下标签的垂直高度

【讨论】:

    【解决方案2】:

    1:+ scale_x_continuous(breaks=rep(5000,12)).

    您也可以在这里使用limits 声明xlim,例如,

    + scale_x_continuous(breaks=rep(5000,12),limits=c(0,60000))
    

    2:对于标签,您可以使用annotate() 或geom_text()。有关示例,请参阅this 帖子。不过,您必须自己计算这些值。

    【讨论】:

    • 添加 xlim 声明似乎效果不佳。查看原始帖子以了解我得到了什么。
    • 对不起,这里使用limits而不是xlim,编辑原帖以便更好地解释。
    猜你喜欢
    • 2020-11-21
    • 2021-06-02
    • 2013-03-26
    • 2020-02-13
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多