地面geom_text到x轴(例如y = 0)

时间:2019-04-29 09:35:08

标签: r ggplot2 position geom-text

我在ggplot中制作了一个图形,如下所示:

bubblegum

我希望在每个要接地/粘合到y <= 0的x轴的条上都有数字标签。

下面是生成图形的代码:

ggplot(data=df) +
  geom_bar(aes(x=row, y=numofpics, fill = crop, group = 1), stat='identity') +
  geom_point(data=df, aes(x = df$row, y=df$numofparcels*50, group = 2), alpha = 0.25) +
  geom_line(data=df, aes(x = df$row, y=df$numofparcels*50, group = 2), alpha = 0.25) +
  geom_text(aes(x=row, y=numofpics, label=bbch)) +
  geom_hline(yintercept=300, linetype="dashed", color = "red", size=1) +
  scale_y_continuous(sec.axis= sec_axis(~./50, name="Number of Parcels")) +
  scale_x_discrete(name = c(),breaks = unique(df$crop), labels = as.character(unique(df$crop)))+
  labs(x=c(), y="Number of Pictures")

我已经尝试vjust并针对position_nudge元素进行了geom_text的实验,但是我发现的每个解决方案都会将geom_text的每个元素的位置更改为它的当前位置。因此,我尝试的所有情况都会导致这种情况:

bubblegum2

如何使ggplot将文本固定到y <= 0的x轴底部,可能还引入angle = 45

链接到数据框= https://drive.google.com/file/d/1b-5AfBECap3TZjlpLhl1m3v74Lept2em/view?usp=sharing

3 个答案:

答案 0 :(得分:1)

我在代理服务器后面,该代理服务器阻止与Google驱动器的连接,因此我无法访问您的数据。我无法对此进行测试,但是我会在数据集中引入一个新的标签字段,如果y <0:则将y设置为0:

df <- df %>%
  mutate(labelField = if_else(numofpics<0, 0, numofpics)

然后我将在我的geom_text调用中使用此标签字段:

geom_text(aes(x=row, y=labelField, label=bbch), angle = 45)

希望有帮助。

答案 1 :(得分:1)

您可以简单地在geom_text中定义y值(例如-50)

ggplot(data=df) +
  geom_bar(aes(x=row, y=numofpics, fill = crop, group = 1), stat='identity') +
  geom_point(data=df, aes(x = df$row, y=df$numofparcels*50, group = 2), alpha = 0.25) +
  geom_line(data=df, aes(x = df$row, y=df$numofparcels*50, group = 2), alpha = 0.25) +
  geom_text(aes(x=row, y=-50, label=bbch)) +
  geom_hline(yintercept=300, linetype="dashed", color = "red", size=1) +
  scale_y_continuous(sec.axis= sec_axis(~./50, name="Number of Parcels")) +
  scale_x_discrete(name = c(),breaks = unique(df$crop), labels = 

as.character(unique(df $ crop)))+       labs(x = c(),y =“图片数量”)

答案 2 :(得分:1)

正如我在评论中所说,只需将文本的y坐标设置为0或以下,并指定角度:geom_text(aes(x=row, y=-100, label=bbch), angle=45)

enter image description here