Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scattermatrix in ggplot2/GGally without density plots

Tags:

r

ggplot2

ggally

I made a scattermatrix with the ggplot2 extension GGally with the following code

  ggscatmat(dat2, columns = 2:6, color="car", alpha=0.8) +
  ggtitle("Korrelation") + 
  theme(axis.text.x = element_text(angle=-40, vjust=1, hjust=0, size=10))

Now my problem is that in this case I don't really need the density lineplot or the correlation coeff., I do only want the scatterplots in the matrix. Is there a way to "delete" the other facets? I can#T find anything in the documentation.

Please excuse my bad english and thanks for any advice or help!

Scattermatrix with ggscatmat {GGally}

Edit: I found a not yet perfect solution with ggpairs:

ggpairs(dat2, columns = 2:6, mapping= aes(color=car), 
        upper = "blank",diag = "blank") +
  theme(axis.text.x = element_text(angle=-40, vjust=1, hjust=0, size=10))

But now there's no legend anymore and two labels looking like the plot hasn't fully loaded yet: enter image description here

like image 819
Marie-Louise Avatar asked Apr 20 '16 10:04

Marie-Louise


2 Answers

You can manually remove parts of the plot by messing about with the gtable

 removePanels <- function(plot) {

         g <-  ggplotGrob(plot)

         # get panels to remove: upper + diagonal
         ids <- grep("panel", g$layout$name)
         cols <- sqrt(diff(range(ids)) +1)
         remove <- matrix(ids, ncol=cols)
         remove <- remove[upper.tri(remove, diag=TRUE)]

         # remove certain axis
         yax <- grep("axis-l", g$layout$name)[1] # first
         xax <- tail(grep("axis-b", g$layout$name), 1) #last

         # remove cetain strips
        ystrip <- grep("strip-right", g$layout$name)[1]
        xstrip <- tail(grep("strip-top", g$layout$name), 1)

        # remove grobs
        g$grobs[c(remove, xax, yax, ystrip, xstrip)] <- NULL
        g$layout <- g$layout[-c(remove, xax, yax, ystrip, xstrip),]
        g
      }

# draw
library(GGally)
library(ggplot2)
library(grid)

p <- ggscatmat(iris, columns = 1:4, color="Species", alpha=0.8) +
          theme(axis.text.x = element_text(angle=-40, vjust=1, hjust=0, size=10))

grid.newpage()      
grid.draw(removePanels(p))
like image 55
user20650 Avatar answered Oct 25 '22 14:10

user20650


Following the official documentation, you can set an element of the ggpairs to blank. In your case you would be interested in changing the value for the diag to diag = "blank" , as shown in the example below.

Example

On example of the mtcars data, you could do the following:

data("mtcars")
require(GGally)
ggpairs(data = mtcars[3:5], diag = "blank")

Results

The code would produce the desired chart without the diagonal plot: No diagonal

like image 30
Konrad Avatar answered Oct 25 '22 16:10

Konrad