【问题标题】:x axis not displaying correctlyx 轴显示不正确
【发布时间】:2019-07-29 02:21:59
【问题描述】:

我有下一个要绘制的函数:

eq = function(x)
{ a=(sin(5*x)+cos(7*x))^2 
  b= 5 * (1/sqrt(2*pi*0.05)) * exp(-x^2/(2*0.05))
  1-a-b
}

一开始我用的是:

plot(eq(-10:10), type='l')

但后来我把它改成了:

plot(eq(-10:10), type='l')
axis (1,at=1:21,labels=(-10:10))

因为 x 轴并没有真正显示我需要的内容。

现在的问题是我看到一些重叠的数字(“-1”顶部的“10”等)不知道为什么。

我的最终目标是像这样显示它(x 和 y 轴都有一条粗线):

【问题讨论】:

标签: r plot


【解决方案1】:

如果您想要位于 x=0 和 y=0 的轴,您可以在基础图形中手动添加它们。这是一些示例代码。可能需要修改文本和刻度线的位置。

eq = function(x)
{ a=(sin(5*x)+cos(7*x))^2 
b= 5 * (1/sqrt(2*pi*0.05)) * exp(-x^2/(2*0.05))
1-a-b
}


# basic plot without axes
plot(y=eq(-10:10)
     ,x=c(-10:10)
     ,xaxt='n'
     ,yaxt='n'
     ,type='l'
     ,col='red'
     ,xlab=''
     ,ylab=''
    )
# grid
grid()

# adding thicker horizontal and vertical lines at axis y=0, x=0
abline(h=0,lwd=2,col='black')
abline(v=0,lwd=2,col='black')

# adding text and ticks for x axis, must be modified based on plot
text(x=-0.7,y=seq(1,-8,-1)[-2],seq(1,-8,-1)[-2])
points(x=seq(-10,10,1)[-11],y=rep(0,20),pch='|')

# adding text and ticks for y axis, must be modified based on plot
text(x=c(seq(-10,10,1))[-11],y=-0.4,c(-10:10)[-11])
points(x=rep(0,9),y=seq(-8,1,1)[-9],pch='―')

# adding text for 0-0 point
text(x=-0.3,-0.2,0)

【讨论】:

    【解决方案2】:

    您需要在更精细的网格上评估函数。使用curve 可能更容易。

    eq <- function(x) {
      a <- (sin(5 * x) + cos(7 * x))^2
      b <- 5 * (1 / sqrt(2 * pi * 0.05)) * exp(-x^2 / (2 * 0.05))
      1 - a - b
    }
    
    curve(eq, from = -10, to = 10, n = 10001)
    axis(1, at = -10:10)
    

    reprex package (v0.2.1) 于 2019 年 3 月 7 日创建

    【讨论】:

      【解决方案3】:

      对我来说,dipetkov 是一个更优雅的解决方案, 但是,如果您想知道如何以 plot 方式进行操作,或者想知道为什么没有显示您想要的结果,请尝试以下操作:

      eq = function(x)
      { a=(sin(5*x)+cos(7*x))^2 
      b= 5 * (1/sqrt(2*pi*0.05)) * exp(-x^2/(2*0.05))
      1-a-b
      }
      
      plot(eq(-10:10), type='l', xaxt='n', ann=FALSE)
      axis (1,at=1:21,labels=(-10:10))
      

      xaxt='n', ann=FALSE 只会隐藏 x 轴,以便您稍后可以重写您想要的 (axis (1,at=1:21,labels=(-10:10)))

      【讨论】:

        【解决方案4】:

        plot(eq(-10:10), type='l') 创建一个 x 轴,所以这样做

        plot(eq(-10:10), type='l')
        axis(1, at=1:21, labels=(-10:10))
        

        您正在叠加两个 x 轴。使用axes = FALSE

        plot(eq(-10:10), type='l', axes = FALSE)
        axis(1, at=1:21, labels=(-10:10))
        axis(2)
        grid()
        

        我使用grid() 来画粗线。

        为了更好的 y 轴:

        y <- eq(-10:10)
        plot(y, type='l', axes = FALSE, ylim = range(pretty(y)))
        axis(1, at=1:21, labels=(-10:10))
        axis(2)
        grid()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-24
          • 1970-01-01
          • 2020-06-28
          • 2017-05-16
          • 1970-01-01
          • 2022-07-06
          • 1970-01-01
          相关资源
          最近更新 更多