2014-09-27 1 views
1

Было задано несколько вопросов о том, как изменить ggplot x axis tick, но у меня возникают проблемы, возможно, из-за других астетиков, которые я использую для построения. Я хочу продлить ось х клеща до 25 с 7.Как изменить xlim в ggplot

Я использую следующий вектор:

var <- c(2,2,1,0,1,1,1,1,1,3,2,3,3,5,1,4,4,0,3,4,1,0,3,3,0,0, 
     1,3,2,6,2,2,2,1,0,2,3,2,0,0,0,0,3,2,2,4,3,2,2,0,4,1,0,1,3,1,4,3,1,2, 
     6,7,6,1,2,2,4,5,3,0,6,5,2,0,7,1,7,3,1,4,1,1,2,1,1,2,1,1,4,2,0,3,3,2,2,2,5,3,2,5,2,5) 

Я использую следующий код, чтобы сделать гистограмму, где ось х клещей под панель

df <- data.table(x = var) 
df <- df[, .N, by=x] 

p <- ggplot(df, aes(x=factor(x), y=N)) + 
    geom_bar(stat="identity", width=1.0, 
       colour = "darkgreen", 
       fill = 'lightslateblue') 

p <- p + labs(title = "hello world", x = "x tick", y = "ytick") 

print(p) 

При печати гистограмму я хотел бы ось х клещей достичь 25

enter image description here

Я попытался использовать coord_cartesian(xlim = c(-0, 25)), но он не выглядит правильно, так как я хотел бы, чтобы тики были помечены вдоль оси x.

enter image description here

+0

Спасибо за то, что проще повторить свой пример. Есть ли причина, по которой вы не используете гистограмму ggplot по умолчанию? – andybega

+0

'range (var)' is '[1] 0 7', так что вы получаете правильное поведение от вашего вызова' coord_cartesian'. Ваш диапазон 'y' правильный (он равен 25). Зачем вам нужна ось 'x', чтобы перейти к 25? Если у вас неверны переменные осей x & y, попробуйте 'p <- ggplot (df, aes (x = N, y = x))', если именно так вы хотите отображать данные. – hrbrmstr

+0

@ hrbrmstr Я хочу сравнить сдвиг гистограммы с другим распределением. Чтобы правильно это сделать, оси x и y должны быть одинаковыми. Его просто совпадение, что мне нужно, чтобы ось x стала галочкой, чтобы достичь 25, пока она является максимальной для y. На самом деле мне также нужно будет изменить ось y на 50. Я не спрашивал, потому что я мог бы реплицировать от того, как изменить ось x. – DataTx

ответ

4

Проблема заключается в том, что вы конвертируете x к фактору в эстетике называют. Вы можете обойти эту проблему, указав «уровни» вы хотите заранее, и убедившись, что они не понижены (from this question):

df$x <- factor(df$x, levels=c(0:25)) 

p <- ggplot(df, aes(x=x, y=N)) + 
    geom_bar(stat="identity", width=1.0, 
      colour = "darkgreen", 
      fill = 'lightslateblue') 

p <- p + labs(title = "hello world", x = "x tick", y = "ytick") + 
    scale_x_discrete(drop=FALSE) + ylim(c(0, 50)) 

print(p) 

Который даст вам расширенную гистограмму.

Histogram with extended x-scale

Я не уверен, почему вы производите гистограмму таким окольным путем, хотя:

p <- qplot(var, geom="histogram") + xlim(c(0, 25)) + ylim(c(0, 50)) 

enter image description here

Edit: Изменение ylim в 0-50.

+0

Спасибо @andybega за помощь. Для первого графика показано, как я могу изменить интервал ilim на разрыв с интервалом 5 – DataTx

+0

. Добро пожаловать. Для разрывов 5 вместо 'ylim' используйте' scale_y_continuous (пределы = c (0, 50), breaks = seq (0, 50, 5)) '. – andybega

0

Этот способ может помочь:

library(ggplot2) 
library(data.table) 

df <- data.table(x = var) 
df <- df[, .N, by=x] 

# Add 8-25 rows to your data in order to get displayed 
df <- 
    rbind(
    df, 
    data.frame(x=rep(8:25), N=0) 
) 

p <- 
    ggplot(df, aes(x=factor(x), y=N)) + 
    geom_bar(
     stat="identity", width=1.0, 
     colour = "darkgreen", 
     fill = 'lightslateblue' 
) + 
    scale_y_continuous(# <- set the limits for your y-axis 
    limits = c(0,50) 
) 

p <- p + 
    labs(title = "hello world", x = "x tick", y = "ytick") 
p