How to plot a function curve in R

RGgplot2PlotLatticeR Faq

R Problem Overview


R Solutions


Solution 1 - R

I did some searching on the web, and this are some ways that I found:

The easiest way is using curve without predefined function

curve(x^2, from=1, to=50, , xlab="x", ylab="y")

enter image description here

You can also use curve when you have a predfined function

eq = function(x){x*x}
curve(eq, from=1, to=50, xlab="x", ylab="y")

enter image description here

If you want to use ggplot,

library("ggplot2")
eq = function(x){x*x}
ggplot(data.frame(x=c(1, 50)), aes(x=x)) + 
  stat_function(fun=eq)

enter image description here

Solution 2 - R

You mean like this?

> eq = function(x){x*x}
> plot(eq(1:1000), type='l')

Plot of eq over range 1:1000

(Or whatever range of values is relevant to your function)

Solution 3 - R

plot has a plot.function method

plot(eq, 1, 1000)

Or

curve(eq, 1, 1000)

Solution 4 - R

Here is a lattice version:

library(lattice)
eq<-function(x) {x*x}
X<-1:1000
xyplot(eq(X)~X,type="l")

![Lattice output][1] [1]: http://i.stack.imgur.com/WCw08.jpg

Solution 5 - R

Lattice solution with additional settings which I needed:

library(lattice)
distribution<-function(x) {2^(-x*2)}
X<-seq(0,10,0.00001)
xyplot(distribution(X)~X,type="l", col = rgb(red = 255, green = 90, blue = 0, maxColorValue = 255), cex.lab = 3.5, cex.axis = 3.5, lwd=2 )
  1. If you need your range of values for x plotted in increments different from 1, e.g. 0.00001 you can use:

> X<-seq(0,10,0.00001)

  1. You can change the colour of your line by defining a rgb value:

> col = rgb(red = 255, green = 90, blue = 0, maxColorValue = 255)

  1. You can change the width of the plotted line by setting:

> lwd = 2

  1. You can change the size of the labels by scaling them:

> cex.lab = 3.5, cex.axis = 3.5

Example plot

Solution 6 - R

As sjdh also mentioned, ggplot2 comes to the rescue. A more intuitive way without making a dummy data set is to use xlim:

library(ggplot2)
eq <- function(x){sin(x)}
base <- ggplot() + xlim(0, 30)
base + geom_function(fun=eq)

Additionally, for a smoother graph we can set the number of points over which the graph is interpolated using n:

base + geom_function(fun=eq, n=10000)

Solution 7 - R

Function containing parameters

I had a function (emax()) involving 3 parameters (a, b & h) whose line I wanted to plot:

emax = function(x, a, b, h){
  (a * x^h)/(b + x^h)
}
curve(emax, from = 1, to = 40, n=40 a = 1, b = 2, h = 3)

which errored with Error in emax(x) : argument "a" is missing, with no default error.

This is fixed by putting the named arguments within the function using this syntax:

curve(emax(x, a = 1, b = 2, h = 3), from = 1, to = 40, n = 40)

which is contrary to the documentation which writes curve(expr, from, to, n, ...) rather than curve(expr(x,...), from, to, n).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsjdhView Question on Stackoverflow
Solution 1 - RsjdhView Answer on Stackoverflow
Solution 2 - REricView Answer on Stackoverflow
Solution 3 - RGSeeView Answer on Stackoverflow
Solution 4 - RJohn PaulView Answer on Stackoverflow
Solution 5 - RmrkView Answer on Stackoverflow
Solution 6 - RMikkel Roald-ArbølView Answer on Stackoverflow
Solution 7 - RTimothy M PollingtonView Answer on Stackoverflow