Подтвердить что ты не робот

Как изменить положение оси x и y в ggplot2

В моем реальном мире исследований очень часто показывают ось X сверху (или верхнюю и нижнюю), и ось Y справа. Тем не менее, позиции по умолчанию: x внизу и y слева в ggplot2.

Следуя Kohske Post Here, используются следующие команды:

x <- seq(0, 10, 0.1)
y <- sin(x * pi)
qplot(x, y, geom = "line") + 
scale_x_continuous(guide = guide_axis(position = "top")) + 
scale_y_continuous(guide = guide_axis(position = "right"))

Я пробовал выше команды в dev-mode:

install_packages("devtools")
library(devtools)
dev_mode()
install_github("ggplot2", "kohske", "feature/pguide")
library(ggplot2) 

К сожалению, это не сработало с последним пакетом plyr. Сообщения:

The following 'from' values not present in 'x': col, color, pch, cex, lty, lwd, srt, adj, bg, fg, min, max... 
Error in plyr:::split_indices(seq_len(nrow(data)), scale_id, n)

Затем я пробовал коды из github, сообщения:

Error in continuous_scale(c("x", "xmin", "xmax", "xend", "xintercept"),  : 
  formal argument "guide" matched by multiple actual arguments

Я заметил, что Хэдли сказал, что эта функция включена в его список дел. Однако на данный момент я не мог найти решение. Может ли кто-нибудь помочь?

4b9b3361

Ответ 1

Из ggplot 2.2.0 вы можете установить положение осей с аргументом position в scale_:

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  scale_x_continuous(position = "top") + 
  scale_y_continuous(position = "right")

введите описание изображения здесь

Ответ 2

решение ggplot2

Я принимаю Это решение для создания правой оси y. Лично я считаю, что манипулирование грыбами, использующими в пределах gtable, очень сложно. Я отказываюсь от оси x, но я даю решение решетки. Я надеюсь, что эта функциональность будет реализована в ggplot2 как можно скорее.

library(ggplot2)
library(gtable)
library(grid)
grid.newpage()
dat <- data.frame(x<-seq(0, 10, 0.1),y = sin(x * pi))
p <- ggplot(dat, aes(x, y)) + geom_line(colour = "blue") + theme_bw()
# extract gtable
g <- ggplot_gtable(ggplot_build(p))

# axis tweaks
ia <- which(g$layout$name == "axis-l")
ax <- g$grobs[[ia]]$children[[2]]
ax$widths <- rev(ax$widths)
ax$grobs <- rev(ax$grobs)
ax$grobs[[1]]$x <- ax$grobs[[1]]$x - unit(1, "npc") + unit(0.15, "cm")
pp <- c(subset(g$layout, name == "panel", select = t:r))
g <- gtable_add_cols(g, g$widths[g$layout[ia, ]$l], length(g$widths) - 1)
g <-  gtable_add_grob(g, ax, pp$t, length(g$widths) - 1, pp$b)
g$grobs[[ia]]$children[[2]] <- NULL
##############################
ia <- which(g$layout$name == "ylab")
ylab <- g$grobs[[ia]]
g <- gtable_add_cols(g, g$widths[g$layout[ia, ]$l], length(g$widths) - 1)
g <-  gtable_add_grob(g, ylab, pp$t, length(g$widths) - 1, pp$b)
g$grobs[[ia]]$label = ''
grid.draw(g)

enter image description here

решение решетки

Это не решение ggplot2, а lattice one. Используя latticeExtra с темой ggplot2, мы можем получить аналогичный вид с желаемым поведением.

library(latticeExtra)
xyplot(y~ x, type='l', scales=list(x=list(alternating=2),
                                   y=list(alternating=2)),
       par.settings = ggplot2like(),axis=axis.grid)

enter image description here