有一些问题询问如何更改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
我尝试使用coord_cartesian(xlim = c(-0, 25))
,但它没有正确绘制,因为我希望沿x轴标记刻度线。
答案 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)
这将为您提供扩展的直方图。
我不知道你为什么要以这种迂回方式制作直方图:
p <- qplot(var, geom="histogram") + xlim(c(0, 25)) + ylim(c(0, 50))
编辑:将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