Skip to content

ggplot2 and add circle

7 messages · Scott Chamberlain, Alaios, Dennis Murphy

#
Dear all,
today I have writted the following code,
to plot the contents of some matrices I have

plot_shad_f
function(f){
  library(ggplot2)
  dev.new()
  plotdata<-melt(f)
  names(plotdata)<-c('x','y','z')
  v<-ggplot(plotdata, aes(x, y, z = z))
  print(v + geom_tile(aes(fill=z))) 
}

I would like to ask your help add a small circle in this plotting. What would be the easiest way to do that in ggplot2?

Best Regards
Alex
#
Hi:

Here's one way:

plot_shad <- function(d, r) {
   require('ggplot2')
   plotdata <- melt(d)
   names(plotdata)<-c('x','y','z')
   xc <- mean(range(plotdata$x))
   yc <- mean(range(plotdata$y))
   theta <- seq(-pi, pi, length = 200)
   circ <- data.frame(xv = xc + r * cos(theta),
                      yv = yc + r * sin(theta))
   v <- ggplot(plotdata)
   print(v + geom_tile(aes(x = x, y = y, fill = z)) +
         geom_path(data = circ, aes(x = xv, y = yv), color = 'white',
size = 1) +
         coord_equal()
        )
 }

plot_shad(f, 10)

HTH,
Dennis
On Tue, May 10, 2011 at 10:15 AM, Alaios <alaios at yahoo.com> wrote:
#
Thanks a lot this worked nice. 
It it possible also in ggplot2 to add a small figure? Let's say that I want to have somewhere in the plot the value of r printed.

How can I do that with ggplot 2?

Regards
Alex
--- On Tue, 5/10/11, Dennis Murphy <djmuser at gmail.com> wrote:

            
#
Hi:

Here's a slight modification of the earlier code .

plot_shad <- function(d, r, dtxt) {
  require('ggplot2')
  plotdata <- melt(d)
  names(plotdata)<-c('x','y','z')
  xc <- mean(range(plotdata$x))
  yc <- mean(range(plotdata$y))
  theta <- seq(-pi, pi, length = 200)
  circ <- data.frame(xv = xc + r * cos(theta),
                     yv = yc + r * sin(theta))
  v <- ggplot(plotdata)
  print(v + geom_tile(aes(x = x, y = y, fill = z)) +
        geom_path(data = circ, aes(x = xv, y = yv),
                  color = 'white', size = 1) +
        geom_text(data = dtxt, aes(x = x, y = y, label = lab),
                  color = 'white') +
        coord_equal()
       )
 }

f <- matrix(data=seq(1:10000), nrow=100, ncol=100)
dftxt <- data.frame(x = 80, y = 90, lab = 'r = 0.227')

plot_shad(f, 10, dftxt)


It's not hard to create a separate text string with paste() and then
use it for the lab argument in the dftxt data frame, something like

txt <- paste('r =', with(mydata, round(cor(x, y), 3))
dftxt <- data.frame(x = 80, y = 90, lab = txt)
plot_shad(...)

HTH,
Dennis
On Tue, May 10, 2011 at 11:43 PM, Alaios <alaios at yahoo.com> wrote: