大家好,感谢您的考虑,
目标是在有许多很多x轴标签的情况下提供更多空间。注意我不关心标签本身是否在图上可视化(我在下面的代码中将它们排除在外)。我想要改变的是,当典型的geom_point图中有~1000个x轴标签和1000个数据点时,与那些第一个和最后几个x轴标签相关联的最左边和最右边的点被压碎了绘图区域的边缘。我想填补一些空间,这些点不会受到挤压。
我想知道在scale-x-discrete(limits=c(xi,xii))
和xi
不是数字的情况下是否有办法改变xii
类型的命令,而是字符串。一对例子(希望)明确:
在第一种情况下,最右边的点和灰色阴影图的边缘之间的间距很大,使得该点不会在绘图区域的边缘上向上流血。我希望这个效果在最后一个点和绘图边缘之间有一些空间。
library(ggplot2)
set.seed(10)
lessVals = sample(1:100000, 10, replace = T)
lessIDs = as.character(sample(1:100000, 10, replace = T))
df.less <- data.frame(lessIDs, lessVals)
df.less$lessIDs <- as.character(df.less$lessIDs)
lessDat <- ggplot(df.less)
lessDat + geom_point(aes(lessIDs, lessVals)) + theme(axis.text.x =
element_blank())
然而,在下列情况下,有数千个x轴点,虽然可视化身份本身的标签是无关紧要的,但我想避免让左右两点被压扁到边缘。绘图区。注意我并不关心图中的点被挤压在一起 - 这是不可避免的,过度绘图可以用alpha参数或其他东西来解决。我想要解决的是让图的边缘上的点(最好是左边和右边)在水平面之间有一些缓冲,左边是y轴刻度,右边是目前什么都没有(但可能是一个传说)。
manyIDs = as.character(sample(1:100000, 1000, replace = T))
manyVals = sample(1:100000, 1000, replace = T)
df.many <- data.frame(manyIDs, manyVals)
df.many$manyIDs <- as.character(df.many$manyIDs)
manyDat <- ggplot(df.many)
manyDat + geom_point(aes(manyIDs, manyVals)) + theme(axis.text.x =
element_blank())
我很想知道究竟可以做些什么来为这些点的水平边缘提供一点缓冲。
感谢分享你的天才。
答案 0 :(得分:0)
因为你的x变量是字符,ggplot2会创建一个'离散'的x轴。当类别数量相当小(2 - 25)时,离散轴的默认绘图限制很有意义。您可以使用expand
参数scale_x_discrete
来手动调整绘图限制。视觉外观将取决于点和图形设备的大小,因此您可能需要相应调整。
例如,scale_x_discrete(expand=c(0.1, 0))
将扩展绘图的每一边10%的数据范围。虽然scale_x_discrete(expand=c(0, 2))
将每边扩展2(无论x是什么单位)。另请参阅http://ggplot2.tidyverse.org/reference/scale_discrete.html
p1 <- ggplot(df.less, aes(x=lessIDs, y=lessVals)) +
geom_point() +
theme(axis.text.x=element_blank()) +
labs(title="Default x-axis limits")
# Added x-axis space with expand.
p2 <- ggplot(df.less, aes(x=lessIDs, y=lessVals)) +
geom_point() +
theme(axis.text.x=element_blank()) +
scale_x_discrete(expand=c(0, 2)) +
labs(title="expand=c(0, 2)")
p3 <- ggplot(df.many, aes(x=manyIDs, y=manyVals)) +
geom_point() +
theme(axis.text.x=element_blank()) +
theme(panel.grid.major.x=element_blank()) +
theme(axis.ticks.x=element_blank()) +
labs(title="Default x-axis limits")
# Added x-axis space with expand.
p4 <- ggplot(df.many, aes(x=manyIDs, y=manyVals)) +
geom_point() +
theme(axis.text.x=element_blank()) +
theme(panel.grid.major.x=element_blank()) +
theme(axis.ticks.x=element_blank()) +
scale_x_discrete(expand=c(0.1, 0)) +
labs(title="expand=c(0.1, 0)")
library(gridExtra)
ggsave("plots.png", plot=arrangeGrob(p1, p2, p3, p4, nrow=2),
height=4, width=6, dpi=150)