2016-07-17 3 views
0

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

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

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

ответ

2

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

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

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

enter image description here

+0

Спасибо, работает как шарм. Не знал параметр 'xlim', потому что забыл обновить свои пакеты. –