2015-01-08 14 views
9

ggplot2を使用してx軸に多くの目盛りを付けるプロットがありますが、ティックの一部だけに目盛りラベルが関連付けられています。しかし、ラベルが付いているものの目盛りは、そうでないものよりも長くなるようにしたいと思います。ggplot2:ラベルなしのティックマークの目盛りが短い

答えて

1

theme(axis.ticks.length)

http://docs.ggplot2.org/0.9.2.1/theme.html有用なはずです。

編集申し訳ありません、あなたの質問をもっと慎重に読んでください。ラベルされたものは標準的なmajor.grid ticksですか?またはいくつかのカスタム方法でラベル?基地Rで

+0

彼らは 'すべての長さを定義します'テーマ(axis.ticks.length)を使用して、major.gridティックですマークが付いたものだけでなく、 – baisong

8

、次の2回のaxis(1, ...)呼び出しで(?parを参照)(xaxt='n'有する)初期plotコールとx軸を抑制し、その後、目盛りの長さを制御するtclを使用することができます。

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を要求して、ベースのRグラフィックは – smci

+2

@smciでも問題はない。 –

+1

@scmi - 私は既に投稿した後でタグを見ました(あなたの重要な要件をpost_に含めることは良い考えです)。それにもかかわらず、基本的な使い方をしている人がこの質問に遭遇する可能性があるので、ここでは基本的なR解決策を持つことに傷つくことはありません。 – 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

これは私のために働いた。マークを$ y [seq(1、length(marks $ y)、2)] [ - seq(1、length(marks $ y)/ 2、n_minor + このようにして、 'axis.ticks.length = unit(6、" pt ")'と 'テーマで。 – aaiezza

関連する問題