在阶跃函数图中添加水平线
Posted
技术标签:
【中文标题】在阶跃函数图中添加水平线【英文标题】:Adding horizontal lines in the plot of a step function 【发布时间】:2021-12-31 09:09:11 【问题描述】:我附上图片 image.jpg,我想在其中为 x=8 绘制直线 y=1,即结果将是 image2.jpg。
这些是 image.jpg 的说明。
df <- data.frame(x=Asignaturas, y=solF)
df$xend <- c(df$x[2:nrow(df)],NA)
df$yend <- df$y
p <- (ggplot(df, aes(x=x, y=y, xend=xend, yend=yend)) +
geom_vline(aes(xintercept=x), linetype=2,color="grey") +
geom_point() + # Solid points to left
geom_point(aes(x=xend, y=y), shape=1) + # Open points to right
geom_segment() + # Horizontal line
geom_text(aes(label = paste0(solF,''),vjust = -0.5), color = "black") +
ylab("Función de distribucción") +
xlab("Asignaturas"))
p
有人知道怎么做吗?
谢谢
【问题讨论】:
【参考方案1】:使用基础 R 的选项。
plot(df$x, df$y, xlim=c(2.5, max(df$x) + .5), ylim=c(0, 1.075), pch=19)
points(df$x + 1, df$y, pch=1)
segments(df$x, df$y, df$x + 1)
text(df$x, df$y + .05, df$y)
sapply(0:1, \(x) lines(2:3 + x*6, rep(x, 2), col='red'))
或者只是
plot(df$x, df$y, type='s', xlim=c(2.5, max(df$x) + .5), ylim=c(0, 1.075))
text(df$x, df$y + .05, df$y)
sapply(0:1, \(x) lines(2:3 + x*6, rep(x, 2), col='red'))
数据:
df <- structure(list(y = c(0, 0.14, 0.31, 0.48, 0.67, 0.82, 1), x = c(2,
3, 4, 5, 6, 7, 8)), class = "data.frame", row.names = c(NA, -7L
))
【讨论】:
【参考方案2】:如果您想坚持使用 ggplot2,geom_segment()
将提供您正在寻找的内容。制作参数的data.frame,然后添加geom_segment()
。
extraLines <- data.frame(x = c(-Inf, max(df$x)), xend = c(min(df$x), Inf), y = c(2, max(df$y)), yend = c(2, max(df$y)))
p +
geom_segment(data = extraLines, aes(x = x, xend = xend, y = y, yend = yend), colour = "red") +
geom_point(data = filter(extraLines, x > 0), aes(x = x, y=y), colour = "red") +
geom_point(data = filter(extraLines, x < max(df$x)), aes(x=xend, y=y), shape = 1, colour = "red")
【讨论】:
以上是关于在阶跃函数图中添加水平线的主要内容,如果未能解决你的问题,请参考以下文章
R语言可视化编写自定义函数可视化水平排序条形图(horizontal bar plot)自定义图像布局模仿经济学人杂志可视化效果右侧添加标签数值图像方框自定义背景色水平条形图中间线条等