【问题标题】:Hiding/Removing part of a curve in R在R中隐藏/删除曲线的一部分
【发布时间】:2019-11-14 05:27:47
【问题描述】:

我想在从一组数据中绘制曲线时,隐藏满足某些条件的部分,例如,隐藏 y 轴上值 > 10 的所有内容。

我不能只将值设置为 0 或一个非常高的数字,而只使用 xlim 或 ylim,因为当我使用线型绘图时,我将有一条垂直线,我不希望这样。

x <- seq(from=-50,to=50,by=0.1)
#I'd like every part of the curve above 1000 to disappear for example
y<--x^2+2500
plot(x,y,type="l")
y[y>1000]<-0
#this will create two vertical lines
plot(x,y,type="l")

通缉:

实际结果:

【问题讨论】:

  • 尝试将 Y 设置为 NULL 吗?
  • 不可能,它告诉我“替换的长度为零”
  • 我的意思是在绘图过程中,以某种方式丢弃结果(某种隐形替换?)。
  • 只绘制 y 低于 1000 的点? (考虑到您的数据,这应该很简单:在对应的 y 高于 1000 之前将 x 从 min 变为 max,然后通过将第一个 x 与 y 低于 1000 直到 max x 来添加曲线的末端(使用lines)跨度>
  • 试试这个:data.frame(x= x,y= y) %&gt;% mutate(y=ifelse(y==0,NA,y)) %&gt;% na.omit() %&gt;% ggplot(aes(x,y))+geom_point() 或简单地过滤不等于 0 的所有内容。为方便起见,使用 tidyverese。

标签: r plot graphics curve


【解决方案1】:
x <- seq(from=-50,to=50,by=0.1)
y<--x^2+2500
ylims <- range(y)
plot(x,y,type="l",ylim = ylims)

y[y>1000]<-NA
plot(x,y,type="l", ylim = ylims)


## tidyverse ====
x <- seq(from=-50,to=50,by=0.1)
y<--x^2+2500
library(tidyverse)

p <- tibble(x,y) %>%
  mutate(yCutoff = ifelse(y>1000, NA, y)) %>%
  ggplot(aes(x,y)) +
  geom_line(aes(y = yCutoff)) +
  ylim(range(y)) +
  theme_minimal()
p

# your x-Values:
p$data  %>% filter(is.na(yCutoff))%>% select(x)
#> # A tibble: 775 x 1
#>        x
#>    <dbl>
#>  1 -38.7
#>  2 -38.6
#>  3 -38.5
#>  4 -38.4
#>  5 -38.3
#>  6 -38.2
#>  7 -38.1
#>  8 -38  
#>  9 -37.9
#> 10 -37.8
#> # … with 765 more rows

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多