我试图将文本打印限制为条形图中的一个变量。如何标记粉红条601, 215, 399, 456
?
ggplot(df, aes(Var1, value, label=value, fill=Var2)) +
geom_bar(stat="identity", position=position_dodge(width=0.9)) +
geom_text(position=position_dodge(width=0.9))
structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L), .Label = c("Zero", "1-30", "31-100", "101+"
), class = "factor"), Var2 = structure(c(1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("Searches", "Contact",
"Accepts"), class = "factor"), value = c(21567, 215, 399, 456,
13638, 99, 205, 171, 5806, 41, 88, 78)), .Names = c("Var1", "Var2",
"value"), row.names = c(NA, -12L), class = "data.frame")
答案 0 :(得分:2)
您可以使用ifelse
中的geom_text
语句执行此操作。首先,从主ggplot2调用中删除label=value
。然后,在geom_text
中在ifelse
上添加label
条件,如下所示。此外,如果你躲避多种审美,你可以通过创建一个躲避对象来节省一些打字。
pd = position_dodge(0.9)
ggplot(df, aes(Var1, value, fill=Var2)) +
geom_bar(stat="identity", position=pd) +
geom_text(position=pd, aes(label=ifelse(Var2=="Searches", value,"")))
如果您希望文本位于栏中间而不是顶部,则可以执行以下操作:
geom_text(position=pd, aes(label=ifelse(Var2=="Searches", value, ""), y=0.5*value))
您实际上可以在主ggplot调用中保留label
语句(添加了ifelse
条件),但由于label
仅适用于geom_text
(或{{ 1}}),我通常用geom而不是主要的电话来保持它。