Расширьте область печати по оси x, чтобы освободить место для прямых меток

Я полирую свои графики и у меня проблема с подгонкой прямых меток в области построения. Хотите удалить большую часть области между y1 и ось Y слева на графике, аналогичную сгенерированной приведенным ниже кодом, но оставьте дополнительную область справа, чтобы иметь место для меток.

Добавление +scale_x_discrete(expand=c(0,0.05)) удаляет дополнительную область с обеих сторон, но не оставляет места для надписей, и кажется, что удалить ее можно только с одной стороны.

Добавление полей справа от области печати +theme(plot.margin = unit(c(0,4,0,0), "cm")) все еще не позволяет ярлыкам появляться там.

Решение, которое размещает метки снаружи, справа от границы, было бы еще лучше.

Любая помощь высоко ценится.

library(ggplot2)
library(directlabels)
library(reshape2)
theme_set(theme_bw())
# some data
dfr<-data.frame(c("Longish Name A","Longish Name B","Longish Name C"),c(1,1,1),c(1,2,3),c(2,3,4)) 
colnames(dfr) <- c("subject","y1","y2","y3")
dfr<-melt(dfr, id.vars="subject")
# the graph
ggplot(data=dfr,aes(y=value, x=variable, group=subject)) +
geom_line(aes(color=subject))+
geom_dl(aes(label=subject), list(dl.trans(x=x+0.2), "last.qp", cex=0.5)) +
guides(color=FALSE)

1 ответ

Решение

Преобразуйте ваши значения x в числовые значения внутри aes() а затем использовать scale_x_continuous() вернуться к оригинальным меткам и установить limits= которые шире на стороне.

ggplot(data=dfr,aes(y=value, x=as.numeric(variable), group=subject)) +
  geom_line(aes(color=subject))+
  geom_dl(aes(label=subject), list(dl.trans(x=x+0.2), "last.qp", cex=0.5)) +
  guides(color=FALSE)+
  scale_x_continuous(breaks=c(1,2,3),labels=c("y1","y2","y3"),expand=c(0,0.05),
                     limits=c(1,3.4))

Другие вопросы по тегам