如何在ggplot中更改xlim

时间:2014-09-27 23:54:59

标签: r ggplot2 histogram

有一些问题询问如何更改ggplot x轴刻度,但我可能因为我用于绘图的其他美学而遇到麻烦。我想将x轴刻度从7扩展到25。

我正在使用以下向量:

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)

我使用下面的代码制作直方图,其中x轴刻度位于条形

之下
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)

当我打印直方图时,我希望x轴刻度达到25

enter image description here

我尝试使用coord_cartesian(xlim = c(-0, 25)),但它没有正确绘制,因为我希望沿x轴标记刻度线。

enter image description here

2 个答案:

答案 0 :(得分: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

编辑:将ylim更改为0-50。

答案 1 :(得分: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