2015-01-08 15 views

Odpowiedz

1

theme(axis.ticks.length)

http://docs.ggplot2.org/0.9.2.1/theme.html powinny być użyteczne.

Edytuj Przepraszamy, po prostu przeczytaj uważnie swoje pytanie. Czy te oznaczone etykietami są standardowymi kleszczami major.grid? lub oznakowane w jakiś niestandardowy sposób?

+0

Są major.grid kleszcze, używając 'Theme (axis.ticks.length)' określi długość wszystkich kleszcze, nie tylko te z etykietami. – baisong

8

bazy B, można zahamować oś x z początkowym plot rozmowy (z xaxt='n'), a następnie za pomocą tcl kontrolowania długości podziałki (patrz ?par) z dwoma axis(1, ...) połączeń.

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

Fajnie, ale OP poprosił o grafikę ggplot, a nie bazę R – smci

+2

@smci Nie ma znaczenia, wciąż niesamowite. –

+1

@scmi - Widziałem tag po tym, jak już napisałem (dobrym pomysłem jest uwzględnienie swoich kluczowych wymagań w poście). Bez względu na to, nie ma problemu z podstawowym rozwiązaniem R, ponieważ ludzie, którzy chcą korzystać z bazy, mogą natknąć się na to pytanie. – jbaums

3

Jest to łatwiejsze z grafiką bazowych, ale tutaj jest próbą używając ggplot2.

Metoda opiera się na this method, która wstawia puste etykiety do sekwencji etykiet (za pomocą kodu z tej odpowiedzi). Po tym, jak przerwy i etykiety będą na miejscu w ggplot, zagłębię się w strukturę działki, aby edytować długości znaczników. (Używaj z rozwagą, nie byłoby to trudne do złamania.)

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

To zadziałało dla mnie. Poza tym zmieniam linię, w której zresetowałeś swoje znaczniki do następujących: 'marks $ y [seq (1, length (marks $ y), 2)] [- seq (1, length (marks $ y)/2, n_minor + 1)] <- unit (1, "npc") - unit (3, 'pt') ' W ten sposób powinieneś także ustawić' axis.ticks.length = unit (6, "pt") ' w temacie. – aaiezza

Powiązane problemy