- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有五个线图,我想从中输出一个阴影区域,代表它们绘制的上部区域和下部区域之间的区域。我正在创建一个 R 脚本(见下文),因为我有多个数据集需要重复此练习。
但是,我只能打印最后一对 i 和 j 的 geom_ribbon - 我似乎无法将每个 geom_ribbon 输出到创建的列表中。
对于如何将所有 geom_ribbon 对象导入列表的任何想法,我将不胜感激。只打印一个图 print(Z)
(下面的例子)。如果可能的话,我希望将所有 geom_ribbon 对象覆盖并打印为单个 ggplot?
Z <- list()
allmaxi <- list(cahp_max_plot15cb$decade_maxa, cahp_max_plot15cb$decade_maxc,cahp_max_plot15cb$decade_maxd, cahp_max_plot15cb$decade_maxe, cahp_max_plot15cb$decade_maxf)
allmaxj <- list(cahp_max_plot15cb$decade_maxa, cahp_max_plot15cb$decade_maxc,cahp_max_plot15cb$decade_maxd, cahp_max_plot15cb$decade_maxe, cahp_max_plot15cb$decade_maxf)
for (i in allmaxi) {
for (j in allmaxj) {
l <- geom_ribbon(data=cahp_max_plot15cb,aes(x=decade,ymin=i, ymax=j))
Z[[length(Z) + 1]] <- l
print(i)
print(j)
}
}
print(ggplot() + Z)
示例输出(来自脚本中的 print(i) 和 print(j))将一个数据集(decade_maxa)输入到 i 列表,并将其他四个数据集输入到 j 列表:
[1] 2010.811 1723.783 1961.088 1662.909 1587.191 1662.140 1665.415 1602.974 1807.453 1586.106
[11] 1580.880 1685.253 1653.178 1824.842
[1] 1390.260 1247.700 1263.578 1711.638 1228.326 1762.045 1260.147 1171.914 1697.987 1350.867
[11] 1434.525 1488.818 1610.513 1536.895
`
`[1] 2010.811 1723.783 1961.088 1662.909 1587.191 1662.140 1665.415 1602.974 1807.453 1586.106
[11] 1580.880 1685.253 1653.178 1824.842
`
`[1] 1120.2700 1094.3047 1196.8792 1227.9660 1236.9170 1266.0935 1127.1480 974.6948 947.3365
[10] 1244.3242 1254.2704 1082.3667 1286.9080 1126.1943
`
`[1] 2010.811 1723.783 1961.088 1662.909 1587.191 1662.140 1665.415 1602.974 1807.453 1586.106
[11] 1580.880 1685.253 1653.178 1824.842
`
`[1] 1396.695 1425.073 1382.941 1913.495 1401.754 1499.763 1600.656 1367.043 1413.390 1343.804
[11] 1431.790 1402.292 1329.192 1696.729
`
`[1] 2010.811 1723.783 1961.088 1662.909 1587.191 1662.140 1665.415 1602.974 1807.453 1586.106
[11] 1580.880 1685.253 1653.178 1824.842
`
`[1] 1718.874 1389.134 1501.574 1233.189 1262.480 1508.919 1291.467 1431.869 1505.102 1376.519
[11] 1441.181 1421.552 1326.547 1635.599
`
> print(ggplot() + Z)
`
这是我的目标。也许 lapply 有更好的方法?
这是通过整合中值输出的图像,如下所示:
median_g <- group_by(cahp_max_plot15cbm,decade)
median_gm <- mutate(median_g, median=median(value))
p2 <- ggplot(median_gm) + geom_ribbon(aes(x=decade, ymin=median,ymax=value,group=variable),alpha=0.40,fill="#3985ff") +
geom_line(aes(x=decade,y=value,group=variable,color=variable),lwd=1) +
geom_point(aes(x=decade,y=median))
p2
最佳答案
这是一个稍微过度设计的解决方案:找到所有段与段的交叉点,将这些横坐标添加到组合中,并为每个 x 找到最小值和最大值。
# some segment-segment intersection code
# http://paulbourke.net/geometry/pointlineplane/
ssi <- function(x1, x2, x3, x4, y1, y2, y3, y4){
denom <- ((y4 - y3)*(x2 - x1) - (x4 - x3)*(y2 - y1))
denom[abs(denom) < 1e-10] <- NA # parallel lines
ua <- ((x4 - x3)*(y1 - y3) - (y4 - y3)*(x1 - x3)) / denom
ub <- ((x2 - x1)*(y1 - y3) - (y2 - y1)*(x1 - x3)) / denom
x <- x1 + ua * (x2 - x1)
y <- y1 + ua * (y2 - y1)
inside <- (ua >= 0) & (ua <= 1) & (ub >= 0) & (ub <= 1)
data.frame(x = ifelse(inside, x, NA),
y = ifelse(inside, y, NA))
}
# do it with two polylines (xy dataframes)
ssi_polyline <- function(l1, l2){
n1 <- nrow(l1)
n2 <- nrow(l2)
stopifnot(n1==n2)
x1 <- l1[-n1,1] ; y1 <- l1[-n1,2]
x2 <- l1[-1L,1] ; y2 <- l1[-1L,2]
x3 <- l2[-n2,1] ; y3 <- l2[-n2,2]
x4 <- l2[-1L,1] ; y4 <- l2[-1L,2]
ssi(x1, x2, x3, x4, y1, y2, y3, y4)
}
# testing the above
d1 <- cbind(seq(1, 10), rnorm(10))
d2 <- cbind(seq(1, 10), rnorm(10))
plot(rbind(d1, d2), t="n")
lines(d1)
lines(d2, col=2)
points(ssi_polyline(d1, d2))
# do it with all columns of a matrix (common xs assumed)
# the general case (different xs) could be treated similarly
# e.g by doing first a linear interpolation at all unique xs
ssi_matrix <- function(x, m){
# pairwise combinations
cn <- combn(ncol(m), 2)
test_pair <- function(i){
l1 <- cbind(x, m[,cn[1,i]])
l2 <- cbind(x, m[,cn[2,i]])
pts <- ssi_polyline(l1, l2)
pts[complete.cases(pts),]
}
ints <- lapply(seq_len(ncol(cn)), test_pair)
do.call(rbind, ints)
}
# testing this on a matrix
m <- replicate(5, rnorm(10))
x <- seq_len(nrow(m))
matplot(x, m, t="l", lty=1)
test <- ssi_matrix(x, m)
points(test)
# now, apply this to the dataset at hand
library(ggplot2)
library(reshape2)
library(plyr)
set.seed(123)
data <- data.frame(decade=1:10)
n=nrow(data)
data$maxa <- runif(n,1000,2000)
data$maxb <- runif(n,1000,2000)
data$maxc <- runif(n,1000,2000)
data$maxd <- runif(n,1000,2000)
data$maxe <- runif(n,1000,2000)
newpoints <- setNames(data.frame(ssi_matrix(data$decade, data[,-1L]),
"added"), c("decade", "value", "variable"))
mdata <- melt(data, id=1L)
interpolated <- ddply(mdata, "variable", function(d){
xy <- approx(d$decade, d$value, xout=newpoints[,1])
data.frame(decade = xy$x, value=xy$y, variable = "interpolated")
})
all <- rbind(mdata, interpolated, newpoints)
rib <- ddply(all, "decade", summarise,
ymin=min(value), ymax=max(value))
ggplot(mdata, aes(decade)) +
geom_ribbon(data = rib, aes(x=decade, ymin=ymin, ymax=ymax),
alpha=0.40,fill="#3985ff")+
geom_line(aes(y=value, colour=variable))
关于R ggplot2 : overlaying multiple geom_ribbon objects in a single plot using a nested loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32267709/
嗨,我得到了一个具有以下结构的数据框weekly.mean.values: week:mean:ci.lower:ci.upper 其中周是一个因素; mean、ci.lower 和 ci.upper
我希望绘制两个时间序列,并根据当时哪个系列较大来对系列之间的空间进行着色。 这是两个系列——首先在一个数据框中,其中包含当时较大的系列的指示符 d1 <- read.csv("https://dl.d
我用 geom_line 和 geom_ribbon 创建了一个图(图 1),结果还不错,但为了美观,我希望线条和丝带更平滑。我知道我可以使用 geom_smooth 作为线条(图 2),但我不确定是
我有以下ggplot2绘制从第三个四分位数到第 97 个四分位数的功能区的代码: h <- ggplot(l, aes(x=age[limit])) h <- h + geom_ribbon(aes(
鉴于以下数据: df<-data.frame( year=(1996:2000), a=c(2,1.5,1.5,2,3), b=c(2,2,2,3,4), c=c(2,3,3,1,1)
我想绘制一个 geom_ribbon()在那里我根据变量来设置波段的颜色。 例子: library(dplyr) library(ggplot2) df <- tribble( ~year, ~l
我正在跟进讨论开始于:How can I make geom_area() leave a gap for missing values? .似乎 geom_ribbon 不再为缺失值留下空白。请尝试
我正在尝试在 ggplot2 中为色带着色。使用 geom_ribbon 时,我可以指定 ymin 和 ymax 以及填充颜色。它现在所做的是为 ymin 和 ymax 之间的所有内容着色,而不考虑上
这段代码抛出一个错误,我不知道为什么... library( plyr ) library( ggplot2 ) library( grid ) library( proto ) # the mast
我正在尝试根据 x 值对 geom_ribbon 使用不同的填充(对于 Temp = 0-20 一个填充,20-30.1 另一个填充和 > 30.1 另一个填充)。我正在使用以下代码 library(
我想删除使用 geom_ribbon 创建的图例中的填充。注意 these answers不要解决这个特定问题。 最小工作示例 library(ggplot2) library(ggeffects)
对先前提出的问题 ( Plotting depth range in 'time-series' using ggplot ) 进行跟进,但完全相同。 使用 ggplot 我想要一个图来显示特定个体(
我正在处理来自所有 50 个州的数据。我正在尝试绘制小型多折线图,其中一条线是州(蓝色),另一条线是全国平均水平(灰色)。 这是缅因州的一个例子: 这是我的缅因州数据框的样子: 我试图将州界线低于全国
我有以下代码(作为示例),我想对其进行调整,以使功能区扩展到整个 xrange,如 geom_hline()做。功能区指示哪些值在可接受的范围内。在我的实际应用程序中,有时没有上限或下限,因此 hli
我在回答 this question ,这需要绘制平滑区域,但删除“无用”区域。在一个简单的 geom_area 上做到这一点(不流畅),我只用 geom_ribbon与 aes(ymax=y, ym
使用 highcharter , 有没有办法复制 geom_ribbon形成 ggplot2? 最佳答案 是的,它叫做arearange。您可以查看 https://cran.r-project.or
我想重现 ggplot 样式,使用带状的值显示置信区间,例如 geom_ribbon 或 geom_smooth。 我尝试分别计算置信区间并使用 fill_between() 进行绘图,这很接近但似乎
我正在尝试使用 绘制一些具有“置信区间”的数据的 ECDF,通过阴影区域表示。 ggplot2 .我在合并时遇到问题 geom_ribbon()与 stat_ecdf()达到我追求的效果。 考虑以下示
我正在使用 ggplot,并试图将一个简单矩形形式的功能区添加到我拥有的条形图中。这个想法是显示低于某个值的截止值。 条形图很好,但我不能完全正确地使用功能区 - 我希望它显示得更宽一些,但它似乎仅限
如何将 y=0 和数据点之间的区域着色为绿色?目前它正在为整个 y [0:1] 着色 Variable 0) { outx <- c(outx, x[i]) outy <- c
我是一名优秀的程序员,十分优秀!