R 在ggplot中的特定点中填充该区域

R 在ggplot中的特定点中填充该区域,r,ggplot2,graph,R,Ggplot2,Graph,我正在尝试创建一个绘图,在这个绘图中,我只能使用ggplot2在系数重要的点上填充区域 我创建了以下示例: dt <- data.table(x = 0:23, y = c(0.00788665622373638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.031263597681424, 0.0483478996438207, 0.0339161353262161,

我正在尝试创建一个绘图,在这个绘图中,我只能使用ggplot2在系数重要的点上填充区域

我创建了以下示例:

dt <- data.table(x = 0:23, y = c(0.00788665622373638, 0, 0, 0, 
                     0, 0, 0, 0, 0, 0, 0, 0, 0, 0.031263597681424, 0.0483478996438207, 
                     0.0339161353262161, 0, 0, 0, 0, 0, 0, 0, 0), value = c(0.335524374372203, 
                                                                            0.310445022036626, 0.00348268861151579, 0.000645923627809575, 
                                                                            0.0025476114971974, 0.000979901982654185, 0.00447235816030944, 
                                                                            0.000375791689380511, 0.00850170357523439, 0.185246478252772, 
                                                                            0.236061996429638, 0.611479957550591, 0.916055517054685, 0.047195113633542, 
                                                                            0.00170024647583689, 0.0138696238231373, 0.700687775315984, 0.0562079029293676, 
                                                                            0.00527934454203627, 0.00870851100765857, 0.005848832805464, 
                                                                            0.00300379176492194, 0.00400049813928849, 0.323674152828656))

dt我一直在尝试提供一个函数,该函数将转换数据,以便可以根据请求绘制数据,这样做我发现了这个想法中的一个潜在问题。
考虑一个点x,其中y是正的,值是<0.1,而x-1和x+ 1具有值>0.1。对于geom_面积,该点将被忽略,因为直线的面积为0。因此,我认为其他几种可视化方法可能更有益:
geom_linerange或geom_pointrange可能更好(并且更容易绘制),下面是一个数据示例。它强调值<0.1且y>0的点

ggplot(dt,aes(x=x,y=y)) +
  geom_line(colour='blue') +
  geom_point() +
  geom_linerange(data = dt[dt$value < 0,1,], aes(ymin = 0, ymax = y), color= "skyblue", size = 1)
使用op中的数据:

ggplot(dt,aes(x=x,y=y)) +
  geom_line(colour='blue') +
  geom_point() +
  geom_area(data = for_area(dt, 0.1), fill= "skyblue", alpha = 0.3)

举一个更复杂的例子:

dput(daf)
structure(list(x = 1:25, y = c(0.3, 0.2, 0.2, 0, 0.1, 0.1, 0.3, 
0.2, 0.3, 0.1, 0, 0.3, 0.2, 0.1, 0.3, 0, 0.2, 0.3, 0, 0.1, 0.1, 
0.2, 0.3, 0, 0.3), value = c(0, 0.3, 0, 0, 0, 0.2, 0.3, 0.2, 
0.2, 0.3, 0.2, 0.2, 0, 0, 0.2, 0, 0.2, 0, 0.1, 0.1, 0.1, 0, 0.3, 
0.2, 0.3)), .Names = c("x", "y", "value"), row.names = c(NA, 
-25L), class = "data.frame")

这说明了我前面提到的一些问题:x=3处的值为0.0,而y=0.2,但没有这方面的指标,因为x=4和x=2的y==0的值都大于0.1

使用geom_pointrage,这将成为:

也许可以从两个世界中选择最好的:

ggplot(daf,aes(x=x,y=y)) +
  geom_line(colour='blue') +
  geom_point() +
  geom_area(data = for_area(daf, 0.1), fill= "skyblue", alpha = 0.3 )+
  geom_linerange(data = daf[daf$value<0.1,], aes(ymin = 0, ymax = y), color= "skyblue", size = 1)
ggplot(daf,aes(x=x,y=y))+
几何图形线(颜色为蓝色)+
几何点()+
geom_面积(数据=_面积(daf,0.1),fill=“天蓝”,alpha=0.3)+

geom_linerange(data=daf[daf$valueRight,但您正在填充所有内容,我只想填充
变量中小于0.1的值。我认为您的答案适用于这些特定情况,但当我尝试用不同的数据重现结果时,我没有得到我想要的结果。我现在编辑了
dt
ggplot(dt,aes(x=x,y=y)) +
  geom_line(colour='blue') +
  geom_point() +
  geom_area(data = for_area(dt, 0.1), fill= "skyblue", alpha = 0.3)
dput(daf)
structure(list(x = 1:25, y = c(0.3, 0.2, 0.2, 0, 0.1, 0.1, 0.3, 
0.2, 0.3, 0.1, 0, 0.3, 0.2, 0.1, 0.3, 0, 0.2, 0.3, 0, 0.1, 0.1, 
0.2, 0.3, 0, 0.3), value = c(0, 0.3, 0, 0, 0, 0.2, 0.3, 0.2, 
0.2, 0.3, 0.2, 0.2, 0, 0, 0.2, 0, 0.2, 0, 0.1, 0.1, 0.1, 0, 0.3, 
0.2, 0.3)), .Names = c("x", "y", "value"), row.names = c(NA, 
-25L), class = "data.frame")
ggplot(daf,aes(x=x,y=y)) +
  geom_line(colour='blue') +
  geom_point() +
  geom_area(data = for_area(daf, 0.1), fill= "skyblue", alpha = 0.3 )+
  geom_linerange(data = daf[daf$value<0.1,], aes(ymin = 0, ymax = y), color= "skyblue", size = 1)