我尝试在躲闪的条形图上添加位置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粗标记?
谢谢!
答案 0 :(得分:1)
我不完全确定你想要达到的细节,但这是我的2美分。您可以使用以下代码:
您的首要问题是NbCel
是因素而不是数字。您可以在图表的Y轴上轻松查看。
# convert NbCel from factor to integer
Data$NbCel <- as.integer(as.character(Data$NbCel))
修复此问题后,我们会使用图表本身。
X轴是“日期”信息和“分支”的混合。也许最好使用facet_wrap
在不同的面板(facet)中分离出这两个面板。
# 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轴上组合“embranchement”和不同“日期”的不同栏。在这种情况下,更自然的事情可能是线图,这样您就可以在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轴为“date”,每个“Embranchement”为一行。
即使这不是你想要的,我希望它可以帮助你。
(这个答案需要编辑,以后; - )
尝试使用此代码在facet中的条形图上获取干净的数字。
最重要的更改位于geom_text
:position_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))
您将获得此图表:
我认为这更接近你想要的。让我知道。
答案 1 :(得分: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)