我正在尝试创建一个带有单独数据点和单独标签的简单箱线图。使用数据点创建箱线图没有问题,但我似乎无法以任何清晰准确的方式将各个标签连接到数据点。
我尝试将标签添加到基本箱线图中:
tiff(file = "mir.tif", height = 800, width = 500, units ="px")
boxplot(mirna ~ group, data = mirnas_sub, xlab = "Classification",
ylab = "RPM", main = "mirna", boxwex = .7, col = "white") #, ylim = c(0,25000))
stripchart(mirna ~ group,
data = mirnas_sub,
method = "jitter",
jitter = 0.5,
pch = 20,
col = "black",
vertical = TRUE,
add = TRUE)
with(mirnas_sub, text(group, mirna, labels = dog, pos = 4, offset = 0.5))
dev.off()
这样,所有标签都只是沿着箱线图的中间延伸,并没有真正连接到它们的数据点(除了位于 y 轴上的正确位置之外)。我必须将点和标签分散得相当宽以避免重叠,但标签只是留在图的中间。
我也尝试过ggplot2。
tiff(file = "mir_labels.tif", height = 1000, width = 600, units = "px")
ggplot(mirnas_sub, aes(x = group, y = mirna, color = group)) +
geom_boxplot() +
geom_point(position = position_jitter(width = 0.2)) +
geom_text(aes(label = dog), position = position_jitter(width = 0.2), vjust = -0.5)
dev.off()
在这里,数据点和标签也没有真正连接,很难看出哪个标签应该代表哪个数据点。我还尝试创建一个仅包含标签且没有点的箱线图,但即使如此,标签也会重叠,而且更难准确。当我尝试使用“check_overlap = TRUE”时,一些重叠的数据点被简单地从图中删除,而不是使数据点彼此分散。
我应该怎样做才能创建包含各个数据点和标签的清晰准确的箱线图?
试试这个
mirnas_sub$group <- as.factor(mirnas_sub$group)
mirnas_sub$group_jit <- jitter(as.numeric(mirnas_sub$group))
# tiff(file="mir.tif", height=800, width=500, units ="px")
boxplot(mirna ~ group, data=mirnas_sub, xlab="Classification",
ylab="RPM", main="mirna", boxwex=.7, col="white") #, ylim=c(0, 25000))
with(mirnas_sub, points(group_jit, mirna, pch=20, col=group) )#, ylim=c(0, 25000))
with(mirnas_sub, text(group_jit, mirna, labels=dog, pos=4, offset=0.5))
# dev.off()