2015-01-08 174 views

回答

1

theme(axis.ticks.length)

http://docs.ggplot2.org/0.9.2.1/theme.html應該是有用的。

編輯對不起,只是仔細閱讀你的問題。標籤的是標準的major.grid ticks嗎?或以某種自定義的方式標記?

+0

他們major.grid蜱,使用'主題(axis.ticks.length)'會定義所有的長度不僅是那些有標籤的人。 – baisong

8

在基R,可以與初始plot呼叫(具有xaxt='n')抑制x軸,然後使用tcl控制蜱長度(參見?par)具有兩個axis(1, ...)呼叫。

plot(1:10, xaxt='n', ylab='', las=1) 
axis(1, at=1:10, tcl=-0.8) 
axis(1, at=seq(0, 11, 0.2), labels=NA) 

enter image description here

+0

不錯,但是OP問ggplot,不是base R圖片 – smci

+2

@smci沒關係,依然很棒。 –

+1

@scmi - 我已經發布後看到了標籤(在post_中包含您的關鍵需求是一個好主意)。無論如何,在這裏建立一個基本的R解決方案並沒有什麼壞處,因爲想要使用base的人可能會遇到這個問題。 – jbaums

3

這是基礎的圖形更容易,但這裏是使用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) 

enter image description here

+1

這對我有用。除了我將標記重置的行改爲:'marks $ y [seq(1,length(marks $ y),2)] [ - seq(1,length(marks $ y)/ 2,n_minor + 1)] < - unit(1,'npc') - unit(3,'pt')' 使用這種方法,您還應該設置'axis.ticks.length = unit(6,「pt」)'在主題中。 – aaiezza