[R] example of geom_contour() with function argument

Big Floppy Dog bigfloppydog at gmail.com
Tue Oct 10 05:29:50 CEST 2017


Thank you very much! So, it appears that a grid has to be created for the
function to be used in stat_contour(). Thanks again for this example! It is
very helpful (and could be a worthwhile addition to geom_contour's help
example).

Btw, I was also trying to make the contour plot have shaded regions
corresponding to how much mass there is in between wach contour and I seem
to be getting something very ugly (and useless). Any suggestions?

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_tile(data = xx2, aes(fill = d, alpha = 0.01)) +
    geom_contour(data = xx2, aes(x = X1
                             , y = X2
                             , z = d
                               )
                 ) +
    geom_point() + theme_light() +
    theme(legend.position="none")


Also, I had not completely appreciated the different between require() and
library(). I will look into the differences again! Thanks for pointing this
out.

TIAA.
BFD



On Mon, Oct 9, 2017 at 4:01 PM, jdnewmil <jdnewmil at dcn.davis.ca.us> wrote:

> 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/posti
>> ng-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list