1

我尝试在闪避的条形图上的位置 geom_text 中添加文本但它不适用于 ggplot 中的 xaxis 日期:

Data<-as.data.frame(             
  cbind( 
    as.POSIXct(c("2017-06-26", "2017-06-26" ,"2017-06-26" ,"2017-07-14", "2017-07-14",
    "2017-07-14", "2017-07-14" ,"2017-07-14", "2017-09-14", "2017-09-14"),origin = "1970-01-01", tz = "GMT"),
  c("CHLOROPHYTA","CYANOBACTERIA","INDETERMINES","BACILLARIOPHYTA","CHLOROPHYTA", "CYANOBACTERIA" ,   
    "HAPTOPHYTA","HETEROKONTOPHYTA","CHLOROPHYTA","CYANOBACTERIA" ),
  c(29,8637,3233,97,2816, 63721,282, 18,2001,76593)))
  colnames(Data)<-c("Date","Embranchement","NbCel")

  Data$Date<-as.POSIXct(as.numeric(as.character(Data$Date)), origin = "1970-01-01", tz = "GMT")

  my_plot<-
    ggplot(data=Data, aes(x=Date, y=NbCel, fill=Embranchement,width=1150000)) +
    geom_bar(position = "dodge", stat="identity")+
    geom_text(aes(label=NbCel), vjust=1.6, color="black",
              position = position_dodge(0.9), size=3.5)+
    scale_x_discrete(labels = Data$Date) +
    scale_fill_brewer(palette="Paired")#+
  #axis(1,at=Data$Date,labels = Data$Date)
  print(my_plot)

我得到的是:

在此处输入图像描述

如何在每个栏的中间添加文本?

另一个问题是如何为每个日期添加每个 x 粗标记?

谢谢!

4

2 回答 2

1

您的第一个问题是 NbCel 是一个因素,而不是数字。您可以轻松地在图表的 Y 轴上看到它。

# convert NbCel from factor to integer 
Data$NbCel <- as.integer(as.character(Data$NbCel))

现在在使用了@KoenV 的一些代码之后,我们现在可以

ggplot(data=Data, aes(x=as.character(Date), y=NbCel)) +
       geom_bar(aes(fill=Embranchement), position = position_dodge(), stat="identity") +
       scale_fill_brewer(palette="Paired") +
       geom_text(aes(label=NbCel, y = NbCel + 1200, group = Embranchement), color="black", 
                 position = position_dodge(0.9), size=3.5) 
于 2017-05-23T14:53:19.533 回答
1

我不完全确定你想详细实现什么,但这是我的 2 美分。您可以使用以下代码:

您的第一个问题是这NbCel是一个因素,而不是数字。您可以轻松地在图表的 Y 轴上看到它。

# convert NbCel from factor to integer 
Data$NbCel <- as.integer(as.character(Data$NbCel))

解决了这个问题,我们使用图表本身。

X 轴是“日期”信息和“分支”的混合体。也许最好使用facet_wrap.

# use a facet-wrap (separate plots in one graph)

ggplot(data=Data, aes(x=Embranchement, y=NbCel, fill=Embranchement)) +
  geom_bar(position = position_dodge(), stat="identity")+
  facet_wrap(~Date ,  ncol = 3)   +         ### plot per date
  scale_fill_brewer(palette="Paired") +
  geom_text(aes(label=NbCel, group = Embranchement), vjust=-.5, color="black",
            position = position_dodge(width = 10), size=2.5) + 
  theme(axis.text.x = element_text(angle = 60, hjust = 1, size = 6))  # make X labels readible

在此处输入图像描述

请让我知道这是否是您想要的。

添加

同样,您想在 X 轴上组合来自“分支”和不同“日期”的不同条形。在这种情况下,更自然的做法可能是使用折线图,这样您就可以在 1 个日期上叠加有关不同数据点的频率信息。

您的数据集不完整,即并非每个日期都包含所有“分支”。

# indicates measurement not available on every date, hence no lines
with(Data, table(Embranchement, Date))
Embranchement      2017-06-26 2017-07-14 2017-09-14
  BACILLARIOPHYTA           0          1          0
  CHLOROPHYTA               1          1          1
  CYANOBACTERIA             1          1          1
  HAPTOPHYTA                0          1          0
  HETEROKONTOPHYTA          0          1          0
  INDETERMINES              1          0          0

假设缺少读数是空读数,我填充了数据集,产生Data2

Data2 <- rbind(Data, 
               data.frame(Date = as.Date("2017-06-26", format="%Y-%m-%d"), Embranchement = "BACILLARIOPHYTA", NbCel = 0),
               data.frame(Date = as.Date("2017-06-26", format="%Y-%m-%d"), Embranchement = "HAPTOPHYTA", NbCel = 0),
               data.frame(Date = as.Date("2017-06-26", format="%Y-%m-%d"), Embranchement = "HETEROKONTOPHYTA", NbCel = 0),
               data.frame(Date = as.Date("2017-07-14", format="%Y-%m-%d"), Embranchement = "INDETERMINES", NbCel = 0),
               data.frame(Date = as.Date("2017-09-14", format="%Y-%m-%d"), Embranchement = "BACILLARIOPHYTA", NbCel = 0),
               data.frame(Date = as.Date("2017-09-14", format="%Y-%m-%d"), Embranchement = "HAPTOPHYTA", NbCel = 0),
               data.frame(Date = as.Date("2017-09-14", format="%Y-%m-%d"), Embranchement = "HETEROKONTOPHYTA", NbCel = 0),
               data.frame(Date = as.Date("2017-09-14", format="%Y-%m-%d"), Embranchement = "INDETERMINES", NbCel = 0)
               )

现在我们可以创建一个折线图:

ggplot(data=Data2, aes(x=Date, y=NbCel, col=Embranchement, linetype =Embranchement) ) +
  geom_line( size=1.1  ) +
  scale_fill_brewer(palette="Paired") +
  geom_text(aes(label=NbCel), vjust=-.75, color="black", size=2.5) 

产生下图,X 轴上带有“日期”,每个“分支”有一条线。

在此处输入图像描述

即使这不是你想要的,我希望它对你有所帮助。

补充2(方面的回顾,但更好)

(这个答案需要编辑,稍后;-)

尝试使用此代码在构面中的条上获取干净的数字。最重要的变化在于geom_textposition_dodge

ggplot(data=Data, aes(x=Embranchement, y=NbCel, fill=Embranchement)) +
  geom_bar(position = position_dodge(), stat="identity")+
  facet_wrap(~Date ,  ncol = 3)   +         ### plot per date
  scale_fill_brewer(palette="Paired") +
  theme_light() +
  geom_text(aes(label=NbCel, group = Embranchement), vjust=-.5, color="black",
            position = position_dodge(width = 1), size=2.5) +
  theme(axis.text.x = element_text(angle = 60, hjust = 1, size = 6)) 

你会得到这个图表:

在此处输入图像描述

我认为这更接近你想要的。让我知道。

于 2017-05-23T14:16:55.937 回答