扩展ggplot中定性变量的限制
大家好,感谢您的考虑,
目标是在有许多许多x轴标签的情况下提供更多空间。 注意我不在乎标签本身是否在图上可见(我已经在下面的代码中将它们排除在外)。 我想要改变的是,当一个典型的geom_point图中有〜1000个x轴标签和1000个数据点时,与这些第一个和最后几个x轴标签相关的左边和右边的点被压制绘图区域的边缘。 我想填补一些空间,所以这些点不会被挤压。
我想知道在xi
和xii
不是数字的情况下是否有办法改变scale-x-discrete(limits=c(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())
我很想知道为了给这些点的水平边缘提供一点缓冲区,可以做些什么。
感谢分享你的天才。
因为你的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)
链接地址: http://www.djcxy.com/p/24933.html
上一篇: extend limit for qualitative variable in ggplot
下一篇: Optimal/efficient plotting of survival/regression analysis results