我有一个具有以下结构的数据框:
dat <- data.frame(
values = c (2, 5, 6, 7,
4, 6, 8, 9,
6, 8, 10, 13),
race = c("black", "black", "black", "black",
"white", "white", "white", "white",
"Hispanic", "Hispanic", "Hispanic", "Hispanic"))
我想绘制数据图表,以便每个“种族”出现在 x 轴上,“值”出现在 y 轴上。我真的不想要条形图 - 相反,我想绘制所有数据点(因为条形图掩盖了可能存在异常值的事实,并且它隐藏了每个分布中的差距等)
我知道大多数人在这里更喜欢箱线图、 fiddle 图或其他变体...但我真的很想要一个垂直点图,它按种族群体显示所有数据点,就像我手绘的那样(请见下文)。
我尝试过以下方法:
p <- ggplot(data = dat,
aes(x = race, y = values)) + geom_point()
p + facet_wrap(~race, nrow = 1)
但我希望所有 3 列点都出现在一个面板中。
(我手工绘制的图表并不反射(reflect)我在上面的数据框中的实际数据,但你明白了)
最佳答案
只是为了好玩:
“这才是我真正想要的”
library(ggplot2)
dat <- data.frame(
values = c (2, 5, 6, 7,
4, 6, 8, 9,
6, 8, 10, 13),
race = c("Black", "Black", "Black", "Black",
"White", "White", "White", "White",
"Hispanic", "Hispanic", "Hispanic", "Hispanic"))
ggplot(data = dat,
aes(x = race, y = values, color = race)) +
geom_point(size = 4, show.legend = FALSE)+
scale_color_manual(values = c("#0102fc", "#f3554f", "#04cefe"))+
scale_y_continuous(breaks=c(0:max(dat$values)))+
labs(x = "", y = "", color="")+
expand_limits(x = 0, y = 0)+
theme_classic()+
theme(
text = element_text(size=16),
axis.line = element_line(colour = '#074489', linewidth = 1.5),
axis.text.y = element_text(colour = "#074489"),
axis.text.x = element_text(colour = c("#0102fc", "#f3554f", "#04cefe")),
axis.ticks.length=unit(.25, "cm")
)
关于r - 垂直点显示同一图中多个组的分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75968079/