4
ggplot2를 사용하여 R의 단일 플롯 상단에 X 축 눈금 표시를 그리는 방법을 아는 사람이 있습니까? 나는 튜토리얼과 메일리스트를보고 성공없이 Rhelp을 보았다.ggplot2를 사용하여 단일 그래프의 눈금 표시 위치 변경
미리 감사드립니다. gtable
(일부 업데이트와 2.1.0을 ggplot하는)를 사용하여 아구스
ggplot2를 사용하여 R의 단일 플롯 상단에 X 축 눈금 표시를 그리는 방법을 아는 사람이 있습니까? 나는 튜토리얼과 메일리스트를보고 성공없이 Rhelp을 보았다.ggplot2를 사용하여 단일 그래프의 눈금 표시 위치 변경
미리 감사드립니다. gtable
(일부 업데이트와 2.1.0을 ggplot하는)를 사용하여 아구스
사용 position = 'top'
library(ggplot2)
# Generate some data
df = data.frame(x = 1:10, y = 1:10)
# x-axis breaks
breaks = 1:10
# base plot
p <- ggplot(df, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = breaks, position = 'top') +
scale_y_continuous(limits = c(0, 11), expand = c(0,0)) +
theme_bw()
기존 솔루션을 사용할 수. here
library(ggplot2)
library(gtable)
library(grid)
# Generate some data
df = data.frame(x = 1:10, y = 1:10)
# x-axis breaks
breaks = 1:10
# base plot
p <- ggplot(df, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = breaks) +
scale_y_continuous(limits = c(0, 11), expand = c(0,0)) +
theme_bw()
# Get ggplot grob
g1 <- ggplotGrob(p)
## Get the position of the plot panel in g1
pp <- c(subset(g1$layout, name == "panel", se = t:r))
# Title grobs have margins.
# The margins need to be swapped.
# Function to swap margins -
# taken from the cowplot package:
# https://github.com/wilkelab/cowplot/blob/master/R/switch_axis.R
vinvert_title_grob <- function(grob) {
heights <- grob$heights
grob$heights[1] <- heights[3]
grob$heights[3] <- heights[1]
grob$vp[[1]]$layout$heights[1] <- heights[3]
grob$vp[[1]]$layout$heights[3] <- heights[1]
grob$children[[1]]$hjust <- 1 - grob$children[[1]]$hjust
grob$children[[1]]$vjust <- 1 - grob$children[[1]]$vjust
grob$children[[1]]$y <- unit(1, "npc") - grob$children[[1]]$y
grob
}
# Get xlab and swap margins
index <- which(g1$layout$name == "xlab-b")
xlab <- g1$grobs[[index]]
xlab <- vinvert_title_grob(xlab)
# Put xlab at the top of g1
g1 <- gtable_add_rows(g1, g1$heights[g1$layout[index, ]$t], pp$t-1)
g1 <- gtable_add_grob(g1, xlab, pp$t, pp$l, pp$t, pp$r, clip = "off", name="topxlab")
# Get x axis (axis line, tick marks and tick mark labels)
index <- which(g1$layout$name == "axis-b")
xaxis <- g1$grobs[[index]]
# Swap axis ticks and tick mark labels
ticks <- xaxis$children[[2]]
ticks$heights <- rev(ticks$heights)
ticks$grobs <- rev(ticks$grobs)
# Move tick marks
# Get tick mark length
plot_theme <- function(p) {
plyr::defaults(p$theme, theme_get())
}
tml <- plot_theme(p)$axis.ticks.length # Tick mark length
ticks$grobs[[2]]$y <- ticks$grobs[[2]]$y - unit(1, "npc") + tml
# Swap tick mark labels' margins and justifications
ticks$grobs[[1]] <- vinvert_title_grob(ticks$grobs[[1]])
# Put ticks and tick mark labels back into xaxis
xaxis$children[[2]] <- ticks
# Add axis to top of g1
g1 <- gtable_add_rows(g1, g1$heights[g1$layout[index, ]$t], pp$t)
g1 <- gtable_add_grob(g1, xaxis, pp$t+1, pp$l, pp$t+1, pp$r, clip = "off", name = "axis-t")
# Remove original x axis and xlab
g1 = g1[-c(9,10), ]
# Draw it
grid.newpage()
grid.draw(g1)
친애하는 샌디, 고마워,하지만 작동하지 못했습니다. 변수 x가 범주 형 변수 일 수 있기 때문일 수 있습니다. –