2

I got this figure

enter image description here

Following the answer of similar question

library(ggplot2)
library(egg)

mydf <- transform(mydf, variables = reorder(variables, VIP, decreasing = T))

p1 <- 
  ggplot(mydf, aes(x = variables, y = VIP, group =1))+
  geom_bar(stat="identity") +
  geom_hline(yintercept = 1, size = 2, linetype = 3) +
  theme(axis.title.x =element_blank())
p2 <-
  ggplot(mydf, aes(x = variables, y = coefficient, group =1))+
  geom_point()+
  geom_line()+
  geom_hline(yintercept = 0, size = 2, linetype = 3) 

grid.draw(egg::ggarrange(p1,p2 , ncol=1))

My goal was to order the bars from highest to lowest.

Although, I sorted the variables and VIP from highest to lowest, the bars were ordered from lowest to highest.

Any idea what went wrong and made the bars sorted from lowest to highest?

Data

mydf <- read.table(text = c("
variables   VIP coefficient
diesel  0.705321    0.19968224
twodoors    1.2947119   0.3387236
sportsstyle 0.8406462   -0.25861398
wheelbase   1.3775179   -0.42541873
length  0.8660376   0.09322408
width   0.8202489   0.27762277
height  1.0140934   -0.12334574
curbweight  0.996365    -0.29504266
enginesize  0.8601269   -0.25321317
horsepower  0.7093094   0.16587358
horse_per_weight    1.2389938   0.43380122"), header = T)
Community
  • 1
  • 1
shiny
  • 3,380
  • 9
  • 42
  • 79
  • 1
    There is no argument `decreasing ` in the reorder function. If you replace your reorder call with `reorder(variables, -VIP)` ist should work. – Alex Aug 27 '16 at 08:08
  • @Alex Thanks for your time and help. Could you please post it as an answer? – shiny Aug 27 '16 at 08:21

1 Answers1

5

The problem is due to a wrong use of reorder.

library(ggplot2)
library(egg)

mydf <- transform(mydf, variables = reorder(variables, -VIP))

p1 <- 
  ggplot(mydf, aes(x = variables, y = VIP))+
  geom_bar(stat="identity") +
  geom_hline(yintercept = 1, size = 2, linetype = 3) +
  theme(axis.title.x =element_blank())
p2 <-
  ggplot(mydf, aes(x = variables, y = coefficient, group = 1))+
  geom_point()+
  geom_line()+
  geom_hline(yintercept = 0, size = 2, linetype = 3) 

grid.draw(egg::ggarrange(p1,p2 , ncol=1))

enter image description here

Alex
  • 4,925
  • 2
  • 32
  • 48
  • Thanks for your time and help. As I want line + point in the bottom plot, I had to use group = 1. Without using group =1, the bottom plot will be points only without line. – shiny Aug 27 '16 at 08:29
  • 1
    I did not notice this. Then you need group in your second plot. – Alex Aug 27 '16 at 08:31