Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 适用于可变级别的geom_功能区_R_Ggplot2 - Fatal编程技术网

R 适用于可变级别的geom_功能区

R 适用于可变级别的geom_功能区,r,ggplot2,R,Ggplot2,我正在绘制一些分析结果,在本例中,我试图用颜色填充黑线下方的区域,这是一个可变阈值。我在geom_ribbon上做了类似的事情,但考虑到了一个固定的阈值 这是我正在使用的数据: df <- data.frame(month= seq(560,624,1), US= c(0.67,0.71,1.49,3.47,8.13,12.13,10.52,9.33,5.48,2.72,1.74, 0.16,

我正在绘制一些分析结果,在本例中,我试图用颜色填充黑线下方的区域,这是一个可变阈值。我在
geom_ribbon
上做了类似的事情,但考虑到了一个固定的阈值

这是我正在使用的数据:

 df <- data.frame(month= seq(560,624,1),
                     US= c(0.67,0.71,1.49,3.47,8.13,12.13,10.52,9.33,5.48,2.72,1.74,
                           0.16,0.04,0.15,0.76,0.94,10.60,26.50,15.09,17.93, 
                           15.68,11.69,7.00,3.68,0.46,0.55,1.21,4.14,12.73, 
                           10.24,10.89,22.13,18.76, 18.99,9.76,2.24,0.92,0.29, 
                           0.38,4.92,4.17,2.29,1.92,1.69, 14.87,12.32,2.00,0.67, 
                           0.12,0.06,0.80,4.41,6.70,18.61,7.21,43.62,23.64,12.83,
                           6.00,2.16,0.69,0.16,3.18,8.87,16.45),
                     lim= c(0.63,0.41,1.20,3.11,4.21,5.75,4.88,6.21,8.33,4.34,2.07,
                            1.16,0.63,0.41,1.20,3.11,4.21,5.75,4.88,6.21,8.33,4.34,
                            2.07,1.16,0.63,0.41,1.20,3.11,4.21,5.75,4.88,6.21,8.33,
                            4.34,2.07,1.16,0.63,0.41,1.20,3.11,4.21,5.75,4.88,6.21,
                            8.33,4.34,2.07,1.16,0.63,0.41,1.20,3.11,4.21,5.75,4.88,
                            6.21,8.33,4.34,2.07,1.16,0.63,0.41,1.20,3.11,4.21))


ggplot(df,aes(x=month,y=US)) +
  geom_line(col='deepskyblue4')+
  geom_line(aes(y=df[,'lim']))+
  theme_bw()

df您可以使用
geom_ribbon
,但首先需要稍微处理数据

library(tidyverse)
#set US to lim if lim > US
df2 <- df %>% 
  mutate(US = if_else(lim > US, US, lim))


ggplot(df,aes(x=month,y=US)) +
  geom_ribbon(data = df2, aes(x = month, ymin = US, ymax = lim), fill = "pink") +
  geom_line(col='deepskyblue4')+
  geom_line(aes(y=lim))+      
  labs(title=paste('Station',sep=' '),x="Nº months", y = "Hm3",size=2)+
  theme_bw()
库(tidyverse)
#如果lim>US,则将我们设置为lim
df2%
变异(US=if_-else(lim>US,US,lim))
ggplot(df,aes(x=月,y=美))+
geom_ribbon(数据=df2,aes(x=month,ymin=US,ymax=lim),fill=“pink”)+
geom_线(col='deepskyblue4')+
几何线(aes(y=lim))+
实验室(标题=粘贴('Station',sep=''),x=“Nºmonths”,y=“Hm3”,大小=2)+
主题_bw()

您可以使用
geom_ribbon
,但首先需要稍微处理数据

library(tidyverse)
#set US to lim if lim > US
df2 <- df %>% 
  mutate(US = if_else(lim > US, US, lim))


ggplot(df,aes(x=month,y=US)) +
  geom_ribbon(data = df2, aes(x = month, ymin = US, ymax = lim), fill = "pink") +
  geom_line(col='deepskyblue4')+
  geom_line(aes(y=lim))+      
  labs(title=paste('Station',sep=' '),x="Nº months", y = "Hm3",size=2)+
  theme_bw()
库(tidyverse)
#如果lim>US,则将我们设置为lim
df2%
变异(US=if_-else(lim>US,US,lim))
ggplot(df,aes(x=月,y=美))+
geom_ribbon(数据=df2,aes(x=month,ymin=US,ymax=lim),fill=“pink”)+
geom_线(col='deepskyblue4')+
几何线(aes(y=lim))+
实验室(标题=粘贴('Station',sep=''),x=“Nºmonths”,y=“Hm3”,大小=2)+
主题_bw()

如果将
ymin
ymax
中的一个设置为
NA
,您可以使用
geom_ribbon
,用于那些
x
-您不希望填充的值:

ggplot(df, aes(x = month, 
               ymin = ifelse(lim>US, lim, NA), 
               ymax = US, 
               y = US)) +
  geom_ribbon(fill = "pink") +
  geom_line(color = "deepskyblue4")+
  geom_line(aes(y = lim))+
  theme_bw()
编辑: 如果要填补空白,可以插值数据以获得更好的绘图:

df_itpl <- data.frame(month = seq(min(df$month), max(df$month), .1))

df_itpl$US <- approx(x = df$month, y = df$US, xout = df_itpl$month)$y

df_itpl$lim <- approx(x = df$month, y = df$lim, xout = df_itpl$month)$y

ggplot(df_itpl, aes(x = month, 
               ymin = ifelse(lim>US, lim, NA), 
               ymax = US, 
               y = US)) +
  geom_ribbon(fill = "pink") +
  geom_line(color = "deepskyblue4")+
  geom_line(aes(y = lim))+
  theme_bw()

df_itpl如果您将
ymin
ymax
中的一个设置为
NA
,您可以使用
geom_ribbon
,用于那些
x
-您不想填充的值:

ggplot(df, aes(x = month, 
               ymin = ifelse(lim>US, lim, NA), 
               ymax = US, 
               y = US)) +
  geom_ribbon(fill = "pink") +
  geom_line(color = "deepskyblue4")+
  geom_line(aes(y = lim))+
  theme_bw()
编辑: 如果要填补空白,可以插值数据以获得更好的绘图:

df_itpl <- data.frame(month = seq(min(df$month), max(df$month), .1))

df_itpl$US <- approx(x = df$month, y = df$US, xout = df_itpl$month)$y

df_itpl$lim <- approx(x = df$month, y = df$lim, xout = df_itpl$month)$y

ggplot(df_itpl, aes(x = month, 
               ymin = ifelse(lim>US, lim, NA), 
               ymax = US, 
               y = US)) +
  geom_ribbon(fill = "pink") +
  geom_line(color = "deepskyblue4")+
  geom_line(aes(y = lim))+
  theme_bw()

df_itpl事实上,由于
lim>US
,您高估了极限处的面积。使用
lim>=US
低估了它。这是第一种方法,但并不完全正确。可能需要对数据进行插值,以使交叉点更精确exact@RichardTelford非常感谢你的帮助。的确,正如bVa所提到的,这不是一个精确的方法,但我可以从这一点继续研究它。再次感谢。@RichardTelford我可以建议您参考
dplyr
-依赖关系,或者使用
transform
ifelse
,这样它会变得更具可复制性(或者在后者的情况下甚至更少依赖于包)?事实上,您高估了极限处的面积,因为
lim>US
。使用
lim>=US
低估了它。这是第一种方法,但并不完全正确。可能需要对数据进行插值,以使交叉点更精确exact@RichardTelford非常感谢你的帮助。的确,正如bVa所提到的,这不是一个精确的方法,但我可以从这一点继续研究它。再次感谢。@RichardTelford我可以建议您参考
dplyr
-依赖关系,或者使用
transform
ifelse
,这样它会变得更具可复制性(或者在后者的情况下甚至更少依赖于包)?谢谢Tino,但正如我在结果图中看到的那样,按照这种方法,填充区域的边缘没有完全着色。也许这个问题与已建立的ymax和ymin有关。但这也是一个非常有用的解决方案,我将继续思考如何准确地计算它。谢谢:-)@Marina你指的是哪个例子?插值应至少大致解决此问题。在这里,您可以选择通过将
seq
中的
by
-参数设置为较小的值(例如.01)来进一步减少步骤。非常感谢您的帮助@Tino。在添加插值之前,我参考了您提出的第一种方法,该方法现在解决了边的问题。谢谢Tino,但正如我在生成的图中所看到的,按照这种方法,填充区域的边没有完全着色。也许这个问题与已建立的ymax和ymin有关。但这也是一个非常有用的解决方案,我将继续思考如何准确地计算它。谢谢:-)@Marina你指的是哪个例子?插值应至少大致解决此问题。在这里,您可以选择通过将
seq
中的
by
-参数设置为较小的值(例如.01)来进一步减少步骤。非常感谢您的帮助@Tino。我提到了您在添加插值之前提出的第一种方法,它现在解决了边的问题。