1

我有一个反复出现的问题让我发疯......我正在使用'''geom_area'''以我的x轴作为日期来绘制一个ggplot2。我试图将日期分隔成彼此相等的距离,但我看不到如何......我正在附加我的虚拟数据。第一个图很好地绘制了我的数据,但如果日期彼此接近,我的日期会聚集在一起。我想让它们像“选项 2”一样等距,但“date_sr”不会绘制我的百分比信息。

我非常感谢您能提供的任何帮助。

require(ggplot2)
library(reshape2)
library(RColorBrewer)

sex <- c('F','F','F',
         'M','M','M')

date <- c("26/11/2018","08/02/2020","08/09/2020", 
          "26/11/2018","08/02/2020","08/09/2020")
         
percentage <- c(40, 30, 20, 60, 70, 80)          


df <- data.frame(sex, date, percentage)
print(df)

#option 1
df$date<- as.Date(df$date,format="%d/%m/%Y")
ourdates<-(unique(df$date))
df

area1 <- ggplot(df, aes(date, percentage,fill=sex)) + 
  geom_area()+
  scale_y_continuous(breaks = seq(0,100,10))+
  scale_x_date(breaks = ourdates, date_labels = "%d %b %Y")+ 
  scale_fill_brewer(labels=c("Female","Male"),palette ="Paired")

plot(area1)



#option 2
df$date<- as.Date(df$date,format="%d/%m/%Y")
mydate<-format(df$date, "%d %b %Y")
date_sr<-factor(mydate, levels = rev(unique(mydate)),ordered = TRUE)

#if we do not re-define date_sr as date it won't plot the graph (but then it won't plot the date in the correct format)
#date_sr<-as.Date(df$date, format="%d/%b/%Y")

area2<-ggplot(df,aes(fill=sex,y=percentage,x=date_sr))+
  geom_area()+
  scale_y_continuous(breaks = seq(0,100,10))+
  scale_fill_brewer(labels=c("Female","Male"),palette ="Paired")

plot(area2)

geom_area 绘制女性和男性之间的性别比例。通知 2020 年 2 月 8 日更接近 2020 年 9 月 8 日。我希望将 3 个日期彼此等距绘制,并将日期格式设置为“%d %b %Y”。

在此处输入图像描述

4

1 回答 1

1

这似乎很棘手。geom_area当 x 是一个因子时不绘图。但是,如果您想要等距的日期,我们可以使用rank.

sex <- c('F','F','F',
         'M','M','M')

date <- c("26/11/2018","08/02/2020","08/09/2020", 
          "26/11/2018","08/02/2020","08/09/2020")

percentage <- c(40, 30, 20, 60, 70, 80)          


df <- data.frame(sex, 
             as.Date(date, format = "%d/%m/%Y"),
             percentage)

area1 <- ggplot(df, aes(rank(date), percentage,fill=sex)) + 
  geom_area()+
  scale_y_continuous(breaks = seq(0,100,10))+
  scale_x_continuous(breaks = rank(df$date),
                     labels = format(df$date, "%d/%m/%Y")) +
  scale_fill_brewer(labels=c("Female","Male"),palette ="Paired")

plot(area1)
于 2021-06-21T12:08:36.153 回答