[R] example of geom_contour() with function argument

jdnewmil jdnewmil at dcn.davis.ca.us
Mon Oct 9 23:01:25 CEST 2017


library(mvtnorm) # you were misusing "require"... only use require if 
you plan to
library(ggplot2) # test the return value and fail gracefully when the 
package is missing
set.seed( 1234 )
xx <- data.frame( rmvt( 100, df = c( 13, 13 ) ) )
xx2 <- expand.grid( X1 = seq( -5, 5, 0.1 ) # all combinations... could 
be used to fill a matrix
                   , X2 = seq( -5, 5, 0.1 )
                   )
# compute density as a function of the grid of points
xx2$d <- dmvt( as.matrix( xx2[,1:2] ) ) # feels weird not specifying 
measures of centrality or spread
ggplot( data = xx
       ,  aes( x = X1
             , y = X2
             )
       ) +
     geom_point() + # might want this line after the geom_contour
     geom_contour( data = xx2 # may want to consider geom_tile as well
                 , mapping = aes( x = X1
                                , y = X2
                                , z = d
                                )
                 )
#' ![](https://i.imgur.com/8ExFYtI.png)
## generated/tested with the reprex package to double check that it is 
reproducible

On 2017-10-09 09:52, Big Floppy Dog wrote:
> Hi,
> 
> This is not a HW problem, sadly: I was last in a classroom 30 years 
> ago,
> and can no longer run off to the instructor :-(
> 
> I apologize but I cut and paste the wrong snippet earlier and made a 
> typo
> in doing so, but the result is the same with the more appropriate  
> snippet.
> 
> require(mvtnorm)
> require(ggplot2)
> set.seed(1234)
> xx <- data.frame(rmvt(100, df = c(13, 13)))
> 
> v <- ggplot(data = xx, aes(x = X1, y = X2, z = dmvt, df = c(13,13)))
> v + geom_contour()
> 
> Don't know how to automatically pick scale for object of type function.
> Defaulting to continuous.
> Error: Aesthetics must be either length 1 or the same as the data 
> (100): x,
> y, z, df
> 
> I do not understand how to put in a function as an argument to
> geom_contour() and the examples in the help fileor in the link that 
> Ulrik
> sent are not very helpful to me. Hence, I was asking for some examples 
> that
> might be helpful.
> 
> I guess the answer is to make a second dataset that is regular and make 
> the
> function estimate that, but how do I combine this?
> 
> TIA.
> BFD
> 
> 
> On Mon, Oct 9, 2017 at 11:32 AM, David Winsemius 
> <dwinsemius at comcast.net>
> wrote:
> 
>> 
>> > On Oct 9, 2017, at 6:03 AM, Big Floppy Dog <bigfloppydog at gmail.com>
>> wrote:
>> >
>> > Hello Ulrik,
>> >
>> > I apologize, but I can not see how to provide a pdf in place of the
>> density
>> > function which calculates a KDE (that is, something from the dataset in
>> the
>> > example). Can you please point to the specific example that might help?
>> >
>> > Here is what I get:
>> >
>> > require(mvtnorm)
>> > require(ggplot2)
>> > set.seed(1234)
>> > xx <- data.frame(rmvt(100, df = c(13, 13)))
>> >
>> >
>> > v <- ggplot(faithfuld, aes(waiting, eruptions, z = drmvt, df = c(13,13)))
>> > v + geom_contour()
>> >
>> > Don't know how to automatically pick scale for object of type function.
>> > Defaulting to continuous.
>> > Error: Aesthetics must be either length 1 or the same as the data (5625):
>> > x, y, z, df
>> >
>> 
>> That's not what I get:
>> 
>> > v <- ggplot(faithfuld, aes(waiting, eruptions, z = drmvt, df = c(13,13)))
>> > v + geom_contour()
>> Error in FUN(X[[i]], ...) : object 'drmvt' not found
>> >
>> > ? faithfuld
>> > str(faithfuld)
>> Classes ‘tbl_df’, ‘tbl’ and 'data.frame':       5625 obs. of  3 
>> variables:
>>  $ eruptions: num  1.6 1.65 1.69 1.74 1.79 ...
>>  $ waiting  : num  43 43 43 43 43 43 43 43 43 43 ...
>>  $ density  : num  0.00322 0.00384 0.00444 0.00498 0.00542 ...
>> 
>> So you are apparently trying to throw together code and data that you
>> don't understand. The data you are using is already a density estimate
>> designed to simply be plotted. It is not the original data. 
>> Furthermore you
>> are passing drmvt that is apparently not in either the mvtnorm nor the
>> ggplot2 packages.
>> 
>> You should determine where that function is and then determine how to 
>> do a
>> 2d estimate on the original data. I'm guessing this is homework so not
>> inclined to offer a complete solution.
>> 
>> --
>> David.
>> 
>> 
>> >
>> > Can you please tell me how to use this here? Or is some other example
>> more
>> > appropriate?
>> >
>> > TIA,
>> > BFD
>> >
>> >
>> >
>> > On Mon, Oct 9, 2017 at 2:22 AM, Ulrik Stervbo <ulrik.stervbo at gmail.com>
>> > wrote:
>> >
>> >> Hi BFD,
>> >>
>> >> ?geom_contour() *does* have helpful examples. Your Google-foo is weak:
>> >> Searching for geom_contour brought me: http://ggplot2.tidyverse.
>> >> org/reference/geom_contour.html as the first result.
>> >>
>> >> HTH
>> >> Ulrik
>> >>
>> >> On Mon, 9 Oct 2017 at 08:04 Big Floppy Dog <bigfloppydog at gmail.com>
>> wrote:
>> >>
>> >>> Can someone please point me to an example with geom_contour() that
>> uses a
>> >>> function? The help does not have an example of a function, and also  I
>> did
>> >>> not find anything from online searches.
>> >>>
>> >>> TIA,
>> >>> BFD
>> >>>
>> >>>
>> >>> ------------------------------------------------------------
>> >>> -----------------------------------
>> >>>
>> >>> How about geom_contour()?
>> >>>
>> >>> Am So., 8. Okt. 2017, 20:52 schrieb Ranjan Maitra <maitra at email.com>:
>> >>>
>> >>>> Hi,
>> >>>>
>> >>>> I am no expert on ggplot2 and I do not know the answer to your
>> >>> question. I
>> >>>> looked around a bit but could not find an answer right away. But one
>> >>>> possibility could be, if a direct approach is not possible, to draw
>> >>>> ellipses corresponding to the confidence regions of the multivariate t
>> >>>> density and use geom_polygon to draw this successively?
>> >>>>
>> >>>> I will wait for a couple of days to see if there is a better answer
>> >>> posted
>> >>>> and then write some code, unless you get to it first.
>> >>>>
>> >>>> Thanks,
>> >>>> Ranjan
>> >>>>
>> >>>>
>> >>>> On Sun, 8 Oct 2017 09:30:30 -0500 Big Floppy Dog <
>> >>> bigfloppydog at gmail.com>
>> >>>> wrote:
>> >>>>
>> >>>>> Note: I have posted this on SO also but while the question has been
>> >>>>> upvoted, there has been no answer yet.
>> >>>>>
>> >>>>>
>> >>>>
>> >>> https://stackoverflow.com/questions/46622243/ggplot-
>> >>> plot-2d-probability-density-function-on-top-of-points-on-ggplot
>> >>>>>
>> >>>>> Apologies for those who have seen it there also but I thought that
>> >>> this
>> >>>>> list of experts may have someone who knows the answer.
>> >>>>>
>> >>>>> I have the following example code:
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> require(mvtnorm)
>> >>>>> require(ggplot2)
>> >>>>> set.seed(1234)
>> >>>>> xx <- data.frame(rmvt(100, df = c(13, 13)))
>> >>>>> ggplot(data = xx,  aes(x = X1, y= X2)) + geom_point() +
>> >>> geom_density2d()
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> It yields a scatterplot of X2 against X1 and a KDE contour plot of
>> the
>> >>>>> density (as it should).
>> >>>>>
>> >>>>> My question is: is it possible to change the contour plot to display
>> >>>>> the contours
>> >>>>>
>> >>>>> of a two-dimensional density function (say dmvt), using ggplot2?
>> >>>>>
>> >>>>> The remaining figures in my document are in ggplot2 and therefore I
>> >>>>> am looking for a ggplot2 solution.
>> >>>>>
>> >>>>> Thanks in advance!
>> >>>>>
>> >>>>> BFD
>> >>>>>
>> >>>>>      [[alternative HTML version deleted]]
>> >>>>>
>> >>>>> ______________________________________________
>> >>>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> >>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>> >>>>> PLEASE do read the posting guide
>> >>>> http://www.R-project.org/posting-guide.html
>> >>>>> and provide commented, minimal, self-contained, reproducible code.
>> >>>>>
>> >>>>
>> >>>>
>> >>>
>> >>>        [[alternative HTML version deleted]]
>> >>>
>> >>> ______________________________________________
>> >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> >>> https://stat.ethz.ch/mailman/listinfo/r-help
>> >>> PLEASE do read the posting guide http://www.R-project.org/
>> >>> posting-guide.html
>> >>> and provide commented, minimal, self-contained, reproducible code.
>> >>>
>> >>
>> >
>> >       [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> > https://stat.ethz.ch/mailman/listinfo/r-help
>> > PLEASE do read the posting guide http://www.R-project.org/
>> posting-guide.html
>> > and provide commented, minimal, self-contained, reproducible code.
>> 
>> David Winsemius
>> Alameda, CA, USA
>> 
>> 'Any technology distinguishable from magic is insufficiently 
>> advanced.'
>>  -Gehm's Corollary to Clarke's Third Law
>> 
>> 
>> 
>> 
>> 
>> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list