Ось X не отображается правильно - PullRequest
3 голосов
/ 07 марта 2019

У меня есть следующая функция, которую я хочу построить:

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))

Поскольку ось х не показывала то, что мне было нужно.

Проблема сейчас в том, что я вижу несколько перекрывающихся чисел («10» поверх «-1» и т. Д.), Не знаю, почему,enter image description here

Моей конечной целью было бы отобразить ее следующим образом (жирной линией для осей x и y): enter image description here

Ответы [ 4 ]

3 голосов
/ 07 марта 2019

Если вы хотите, чтобы оси имели x = 0 и y = 0, вы можете добавить их вручную в базовую графику. Вот пример кода. Расположение текста и отметок может быть изменено.

enter image description here

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)
3 голосов
/ 07 марта 2019

Для меня дипетков - более элегантное решение, но если вы хотите узнать, как это сделать способом 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)))

3 голосов
/ 07 марта 2019

Вам нужно оценить функцию на более мелкой сетке.Возможно, будет проще использовать 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)

Создано в 2019-03-07 пакетом Представить (v0.2.1)

1 голос
/ 07 марта 2019

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()

enter image description here

Я использую 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()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...