Как сделать графики ggplot2 красивее? - PullRequest
7 голосов
/ 31 августа 2010

Я сгенерировал следующий график, используя код R, следующий за ним: alt text

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).

Как я могу это сделать?

обновление в ответ Джеймсу: alt text

Ответы [ 2 ]

11 голосов
/ 01 сентября 2010

Как насчет:

(сначала создайте воспроизводимый пример)

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)

Вы, вероятно, хотите немного подкорректировать вертикальную высоту надписей

6 голосов
/ 31 августа 2010

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

Здесь вы также можете поместить объявление xlim, используя limits, например,

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

2: Для этикеток вы можете использовать annotate() или geom_text(). См. этот пост для примеров. Для этого вам придется рассчитать значения самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...