用于绘制具有唯一 R 范围的多条线段的 R 代码
R code for plotting multiple line segments with unique R ranges
我知道这里有很多关于在 R 图中绘制多条线的问题,但我一直在努力完成更具体的任务。我想仅使用为每条线指定的截距和斜率将多个线段添加到图形中。 abline() 对此非常有用,除了每条线在 X 轴上都有一个特定范围,我不希望绘制的线超出范围。
我设法使用 plotrix 获得了我想要的图表,但我希望发布该作品,但该图表看起来并不符合标准(非常基本)。我对 ggpplot 有点熟悉,并且认为在 ggplot 中生成的图表看起来比我所做的要好得多,尤其是在各种主题可用的情况下,但我不知道如何使用 ggplot 做类似的事情。
代码:
图书馆(plotrix)
plot(1, type="n", xlab="PM2.5(ug/m3)", ylab="LogRR 先兆子痫", xlim=c(0, 20), ylim=c( -1, 2.5))
ablineclip(a = 0, b = 0.3, x1=1.2, x2=3)
ablineclip(a = 0, b = 0.08, x1=8.0, x2=13.1)
ablineclip(a = 0, b = 0.5, x1=10.1, x2=18.9)
ablineclip(a = 0, b = 0.12, x1=2.6, x2=14.1)
如有任何帮助,我们将不胜感激!
谢谢。
您可以编写一个基本函数,执行一些代数运算来计算线段的 start/stop 个点,然后将其输入 ggplot
。例如
to_points <- function(intercept, slope, start, stop) {
data.frame(
segment = seq_along(start),
xstart = start,
xend = stop,
ystart = intercept + slope*start,
yend = intercept + slope*stop)
}
然后将其与
一起使用
library(ggplot2)
segments <- to_points(0, c(0.3, 0.08, 0.5, .12),
c(1.2, 8.0, 10.1, 2.6),
c(3, 13.1, 18.9, 14.2))
ggplot(segments) +
aes(xstart, ystart, xend=xend, yend=yend) +
geom_segment() +
coord_cartesian(xlim=c(0,20), ylim=c(-1, 2.5)) +
labs(x="PM2.5(ug/m3)", y="LogRR Preeclampsia ")
这将产生以下情节
(请注意第三段在您指定的区域之外。您可以放下 coord_cartesian
以查看所有段。)
我知道这里有很多关于在 R 图中绘制多条线的问题,但我一直在努力完成更具体的任务。我想仅使用为每条线指定的截距和斜率将多个线段添加到图形中。 abline() 对此非常有用,除了每条线在 X 轴上都有一个特定范围,我不希望绘制的线超出范围。
我设法使用 plotrix 获得了我想要的图表,但我希望发布该作品,但该图表看起来并不符合标准(非常基本)。我对 ggpplot 有点熟悉,并且认为在 ggplot 中生成的图表看起来比我所做的要好得多,尤其是在各种主题可用的情况下,但我不知道如何使用 ggplot 做类似的事情。
代码:
图书馆(plotrix)
plot(1, type="n", xlab="PM2.5(ug/m3)", ylab="LogRR 先兆子痫", xlim=c(0, 20), ylim=c( -1, 2.5))
ablineclip(a = 0, b = 0.3, x1=1.2, x2=3)
ablineclip(a = 0, b = 0.08, x1=8.0, x2=13.1)
ablineclip(a = 0, b = 0.5, x1=10.1, x2=18.9)
ablineclip(a = 0, b = 0.12, x1=2.6, x2=14.1)
如有任何帮助,我们将不胜感激!
谢谢。
您可以编写一个基本函数,执行一些代数运算来计算线段的 start/stop 个点,然后将其输入 ggplot
。例如
to_points <- function(intercept, slope, start, stop) {
data.frame(
segment = seq_along(start),
xstart = start,
xend = stop,
ystart = intercept + slope*start,
yend = intercept + slope*stop)
}
然后将其与
一起使用library(ggplot2)
segments <- to_points(0, c(0.3, 0.08, 0.5, .12),
c(1.2, 8.0, 10.1, 2.6),
c(3, 13.1, 18.9, 14.2))
ggplot(segments) +
aes(xstart, ystart, xend=xend, yend=yend) +
geom_segment() +
coord_cartesian(xlim=c(0,20), ylim=c(-1, 2.5)) +
labs(x="PM2.5(ug/m3)", y="LogRR Preeclampsia ")
这将产生以下情节
(请注意第三段在您指定的区域之外。您可以放下 coord_cartesian
以查看所有段。)