我有一个使用ggplot2的情节,其中我喜欢沿着x轴的许多刻度线,但只有一些刻度线会有与它们相关的刻度标签。但是,我喜欢那些标签长于那些标签的刻度标记。
答案 0 :(得分:9)
在基数R中,您可以使用初始plot
调用(使用xaxt='n'
)来抑制x轴,然后使用tcl
来控制标记长度(请参阅{{1} })有两个?par
来电。
axis(1, ...)
答案 1 :(得分:4)
使用基本图形更容易,但这是使用ggplot2的尝试。
该方法基于this method,它在标签序列中插入空白标签(使用该答案中的代码)。一旦断裂和标签在ggplot中就位,我就会挖掘绘图的结构来编辑刻度线的长度。 (小心使用;打破这个并不难。)
library(ggplot2)
library(grid)
# Data
df = data.frame(x = 1:10, y = 1:10)
# Range of x values
range = 1:10
# Major tick marks
major = 1
# Minor tick marks
minor = 0.2
# Function to insert blank labels
# Borrowed from https://stackoverflow.com/questions/14490071/adding-minor-tick-marks-to-the-x-axis-in-ggplot2-with-no-labels/14490652#14490652
insert_minor <- function(major, n_minor) {
labs <- c(sapply(major, function(x, y) c(x, rep("", y) ), y = round(n_minor)))
labs[1:(length(labs) - n_minor)]
}
# Getting the 'breaks' and 'labels' for the ggplot
n_minor = major/minor - 1
breaks = seq(min(range), max(range), minor)
labels = insert_minor(seq(min(range), max(range), major), n_minor)
if(length(breaks) > length(labels)) labels = c(labels, rep("", length(breaks) - length(labels)))
# The plot
p <- ggplot(df, aes(x = x, y = y)) +
geom_point() +
scale_x_continuous(breaks = breaks, labels = labels) +
coord_cartesian(xlim = range) +
theme_bw() +
theme(panel.grid = element_blank(),
axis.text.x = element_text(margin = margin(t = 5, unit = "pt")))
p
# Edit the plot:
# Change the lengths of the major tick marks
g = ggplotGrob(p)
# Get the x axis
xaxis <- g$grobs[[which(g$layout$name == "axis-b")]]
# Get the tick marks and tick mark labels
ticks <- xaxis$children[[2]]
# Get the tick marks
marks = ticks$grobs[[1]]
# Edit the y positions of the end points of the tick marks
# The '6' and the '3' in the code below
# are the lengths in pts of the major and minor tick marks respectively.
marks$y = unit.c(unit.c(unit(1, "npc") - unit(6, "pt"), unit(1, "npc"),
rep(unit.c(unit(1, "npc") - unit(3, "pt"), unit(1, "npc")), n_minor)))
# Put the tick marks back into the plot
ticks$grobs[[1]] = marks
xaxis$children[[2]] = ticks
g$grobs[[which(g$layout$name == "axis-b")]] = xaxis
# Draw the plot
grid.newpage()
grid.draw(g)
答案 2 :(得分:0)
theme(axis.ticks.length)
http://docs.ggplot2.org/0.9.2.1/theme.html应该有用。
编辑抱歉,请仔细阅读您的问题。被标记的标签是major.grid标记吗?或以某种自定义方式标记?