R увеличить пространство по горизонтали между перекрывающимися точками geom_point - PullRequest
0 голосов
/ 17 января 2020

У меня есть таблица данных, подобная следующей: enter image description here Я пытаюсь построить точки (категориальная переменная «Данные»), соответствующие каждому пациенту в неделю (некоторые продольные данные отсутствуют), но я Необходимо немного увеличить расстояние между точками категориальной переменной «Данные» по горизонтальной оси. Я пытаюсь использовать следующий код:

df=read.delim("/Volumes/test.txt",header=TRUE,sep="\t")

df=df[order(df$ID),]

df$Timepoint<-factor(df$Timepoint,levels=c("w0","w1","w6","w7","w8","w10"))
df$Phase<-factor(df$Phase,levels=c("pre_treat","treat","post_treat"))

ggplot(df,aes(x=Timepoint,y=ID,shape=Data))+
  geom_point(aes(color=Data,shape=Data),size=3.5, position = position_jitter(w = 0.1, h = 0))+
  facet_wrap(~Phase,scales="free_x")+
  scale_shape_manual(values=c(16,0,17))+
  scale_colour_manual(values=c("black","black","gray60"))+
  theme_bw()+ylab("ID")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Проблема, с которой я сталкиваюсь, состоит в том, что точки расположены слишком близко, и порядок каждого символа представляется случайным образом. enter image description here

Я пытался использовать и position_jitter, и position_dodge, но все равно получаю диагонально ориентированную или перекрывающуюся точку. Большое спасибо за вашу помощь!

1 Ответ

1 голос
/ 17 января 2020

Вы можете использовать position_dodge2 () вместо position_dodge () и установить аргумент расширения (..) внутри scale_x_discrete, чтобы увидеть точки:

df = expand.grid(
  ID=c("P1","P2"),
  Timepoint = c("w0","w1","w6"),
  Phase = c("pre_treat","treat","post_treat"),
  Data  =c("Transcriptomics","Methylation","IM")
)

#sample some data
df=df[runif(45)>0.1,]


ggplot(df,aes(x=Timepoint,y=ID,shape=Data))+
  geom_point(aes(color=Data,shape=Data),size=3.5, 
             position = position_dodge2(w = 0.75))+
  facet_wrap(~Phase,scales="free_x")+
  scale_shape_manual(values=c(16,0,17))+
  scale_colour_manual(values=c("black","black","gray60"))+
  scale_x_discrete(expand=c(0.1, 0.5))+
  theme_bw()+ylab("ID")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

enter image description here

...