заземление geom_text по оси x (например, y = 0) - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть график, сделанный в ggplot, который выглядит следующим образом:

bubblegum

Я хочу, чтобы на каждом из стержней были заземлены / приклеены к x цифрыось, где y <= 0. </p>

Это код для генерации графика следующим образом:

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 element, но каждое решение, которое я могу найти, меняет положение каждого элемента geom_text в соответствии с его текущей позицией.Как таковое, все, что я пытаюсь, приводит к ситуации, подобной этой:

bubblegum2

Как я могу заставить ggplot заземлить текст до нижней части оси x, где y <= 0, возможно свозможность также ввести <code>angle = 45?

Ссылка на фрейм данных = https://drive.google.com/file/d/1b-5AfBECap3TZjlpLhl1m3v74Lept2em/view?usp=sharing

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Вы можете просто определить значение y в geom_text (например, -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 =«Количество картинок»)

1 голос
/ 29 апреля 2019

Как я уже говорил в комментариях, просто установите y-координату текста на 0 или ниже и укажите угол: geom_text(aes(x=row, y=-100, label=bbch), angle=45)

enter image description here

1 голос
/ 29 апреля 2019

Я нахожусь за прокси-сервером, который блокирует подключения к Google Drive, поэтому я не могу получить доступ к вашим данным.Я не могу проверить это, но я бы ввел новое поле метки в моем наборе данных, которое устанавливает y равным 0, если y <0: </p>

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

Я бы тогда использовал это поле метки в своем geom_textЗвоните:

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

Надеюсь, что поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...