Рисование линии между точками на ggplot2 R - PullRequest
0 голосов
/ 22 февраля 2019

Мой график, показанный ниже, создаст простой точечный график рассеяния.Я пытаюсь добавить линию между точками (3,45) - (4,40), а затем отдельную линию между точками (2,108) - (3,45) - (3,118) - (4,91) - (4,104), и другое между (3,45) - (4,40).

Я думаю, что это связано с добавлением дополнительной группировки и geom_line.Тем не менее, я немного застрял.

Любая помощь будет здорово.

x<-c(2,3,4,3,4,4)
w<-c(108,114,104,45,91,40)
wts<-data.frame(x,w)
h <- ggplot(data=wts, aes(x,w))
h <- h + geom_point(colour="blue")
h <- h + labs(title="Breaches",x = "Quarter", y= "Number of Breaches")
h<-h + theme_minimal()
h<-h + xlim(1,5)
h<-h + ylim(0,120)
h

1 Ответ

0 голосов
/ 22 февраля 2019

Один из способов сделать это - предоставить новые данные для последующих вызовов на geom_path.Поскольку вы говорите о точках соединения в исходном кадре, я не думаю, что нужно создавать новый кадр, просто укажите, какие столбцы нам нужны.Одна хорошая вещь (с ggplot2) здесь заключается в том, что эстетика (aes(x,w)) неизменна (хотя обновление их вместе с data= не является проблемой).

h +
  geom_path(data=wts[c(4,6),], color="blue") +
  geom_path(data=wts[c(1,4,2,5,3),], color="red")

Я думаю, вы ошиблисьнабрал одну из ваших координат, (3,118) должно быть (3,114)?Если нет, то просто сгенерируйте новый кадр и включите его вместо этого.

sample plot

Кроме того, поскольку вы включаете хотя бы одну точку в обе строки, я нене думаю, что это может быть легко решено с группировкой.Для этого я предполагаю, что вы бы определили третью переменную, присваивающую некоторые точки определенным группам.Вы можете обойти это путем дублирования оскорбительных пунктов, как показано ниже.Вам также необходимо учитывать порядок пунктов:

wts2 <- rbind(wts, wts[4,])
wts2$grp <- c(2,2,2,2,2,1,1)
wts2$ord <- c(1,4,2,5,3,6,7)
# original plot, just changing wts for wts2[wts2$ord,]
h <- ggplot(data=wts2[wts2$ord,], aes(x,w)) +
  geom_point(colour="blue") + 
  labs(title="Breaches",x = "Quarter", y= "Number of Breaches") +
  theme_minimal() +
  xlim(1,5) + ylim(0,120)
# an alternative to my first answer
h + geom_path(aes(group = grp, color = factor(grp)))

sample plot 2

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