R ggplot2 — отображение нескольких функций на одном графике с разными диапазонами оси x.

Я хочу рисовать разные математические функции на одном графике, ограничивая некоторые из них другим диапазоном значений x. Код:

# Different functions
stereographic <- function(theta,f=1) {
  2*f*tan(theta/2.0)
}

equidistant <- function(theta,f=1) {
  f*theta
}

equisolidangle <- function(theta,f=1) {
  2*f*sin(theta/2.0)
}

orthographic <- function(theta,f=1) {
  f*sin(theta)
}

# Plot
p <- ggplot(data = data.frame(x = c(0,pi)), mapping = aes(x = x))

p <- p +
  stat_function(fun=stereographic,aes(colour="Stereografisch")) +
  stat_function(fun=equidistant,aes(colour="Äquidistant")) +
  stat_function(fun=equisolidangle,aes(colour="Flächentreu")) +
  ylim(0,3)
print(p)

Теперь я хочу добавить еще одну функцию в диапазоне оси x [0,pi/2], но не могу найти рабочий метод. Я всегда получаю что-то вроде ggplot2 doesn't know how to deal with data of class uneval. Можно ли ограничить stat_function новым диапазоном оси x или есть другой хороший метод?


person Matthias Preu    schedule 17.07.2016    source источник


Ответы (1)


xlim в stat_function позволяет установить диапазон отображаемых значений x:

new.func = function(theta,f=1) {
  f/sin(theta)
}

p + stat_function(fun=new.func, aes(colour="1/sin"), xlim=c(0,pi/2))

введите здесь описание изображения

person eipi10    schedule 17.07.2016
comment
Спасибо, работает как шарм. Не знал параметр xlim, потому что забыл обновить свои пакеты. - person Matthias Preu; 18.07.2016