我的数据具有相同的x和y值,但是被另一个变量分类。但是,由于它们具有相同的x和y值,因此我只在图中看到一个圆。我想看到每个圆圈清楚地分开并且在相同的x / y坐标上彼此叠加。
我已经尝试过使用抖动和position_dodge,但它没有清楚地垂直分隔值。
library(ggplot2)
library(scales)
library("RColorBrewer")
x<- c("1","1","1","1","1","1")
y <- c("1","1","1","2","2","2")
z <- c("Treatment 1","Treatment 2","Treatment 3","Treatment 4","Treatment 5","Treatment 6")
data<- data.frame (x,y,z)
ggplot(data=data,aes (x=y, y=x))+
coord_flip()+
geom_point(data=data, aes(x=y, y= x, color = z, pch=16,size =3 ))+
xlab("ID")+
ylab("Time")+
scale_shape_identity()+
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5))
各种处理应垂直分开,以便我们看到每种颜色的圆圈而不是一个圆圈。任何帮助将非常感激!
position_dodge
适合我,但你必须根据输出的大小调整闪避width
。
我也简化了代码,你不必在data = data
层重复aes()
或geom_point()
映射 - 它们将继承自ggplot()
调用。你不应该把pch = 16
或size = 3
等常量放在aes()
中。将它们留在aes()
之外,它们将被视为常数,不产生具有1值且不需要scale
的图例。
ggplot(data=data,aes (x=y, y=x, color = z)) +
coord_flip() +
geom_point(pch = 16, size = 3, position = position_dodge(width = 0.2)) +
xlab("ID") +
ylab("Time") +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5))
ggbeeswarm
包有一些很酷的函数来绘制重叠点
Beeswarm情节(也就是列散点图或小提琴散点图)是绘制通常重叠的点的一种方式,以便它们彼此相邻。除了减少过度绘图外,它还有助于可视化每个点的数据密度(类似于小提琴图),同时仍然可以单独显示每个数据点。
ggbeeswarm
提供了两种不同的方法来使用ggplot2
创建beeswarm风格的地块。它通过添加两个新的ggplot
geom对象来实现:
geom_quasirandom
:使用van der Corput序列或Tukey纹理(Tukey和Tukey“显示经验分布的条带:I。纹理点条”)来分隔点以避免过度绘图。这使用sherrillmix / vipor。geom_beeswarm
:使用beeswarm库来进行基于点大小的偏移。
library(ggplot2)
library(scales)
x <- c("1", "1", "1", "1", "1", "1")
y <- c("1", "1", "1", "2", "2", "2")
z <- c("Treatment 1", "Treatment 2", "Treatment 3", "Treatment 4", "Treatment 5", "Treatment 6")
data <- data.frame(x, y, z)
# install.packages('ggbeeswarm', dependencies = TRUE)
library(ggbeeswarm)
ggplot(data = data, aes(x = y, y = x)) +
geom_quasirandom(aes(col = z), varwidth = TRUE, groupOnX = TRUE, alpha = 3/4, size = 2) +
coord_flip() +
xlab("ID") +
ylab("Time") +
scale_shape_identity() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))
由reprex package创建于2019-04-05(v0.2.1.9000)