Is there a way to limit vline lengths in ggplot2

女生的网名这么多〃 提交于 2021-02-07 05:29:54

问题


I'm trying to show an intercept on a line graph using the ggplot vline and hline but want the lines to cease at the point of interception on the graph. Is this possible either in ggplot or is there another solution

library(ggplot2)

pshare <- data.frame()

for (i in 1:365) {
  pshare <- rbind(pshare,c(i, pbirthday(i,365,coincident=3)))
}

names(pshare) <- c("number","probability")

x25 <- qbirthday(prob = 0.25, classes = 365, coincident = 3) #61
x50 <- qbirthday(prob = 0.50, classes = 365, coincident = 3)
x75 <- qbirthday(prob = 0.75, classes = 365, coincident = 3)

p <- qplot(number,probability,data=subset(pshare,probability<0.99))

p <- p + geom_vline(xintercept = c(x25,x50,x75))
p <- p + geom_hline(yintercept = c(0.25,0.5,0.75))
p

So, for example, I would like the 0.25/61 lines to end when they meet on the plot

TIA


回答1:


Expanding the comment by @joran into an answer and example

geom_vline draws the whole way across the plot; that is its purpose. geom_segment will only draw between specific end points. It helps to make a data frame with the relevant information for drawing the lines.

probs <- c(0.25, 0.50, 0.75)
marks <- data.frame(probability = probs,
                    number = sapply(probs, qbirthday, classes=365, coincident=3))

With this, making the lines only go to the intersection is easier.

qplot(number,probability,data=subset(pshare,probability<0.99)) +
  geom_segment(data=marks, aes(xend=-Inf, yend=probability)) +
  geom_segment(data=marks, aes(xend=number, yend=-Inf))

enter image description here



来源:https://stackoverflow.com/questions/9085104/is-there-a-way-to-limit-vline-lengths-in-ggplot2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!