gpt4 book ai didi

r - 带有数据点的 barplot() - base R

转载 作者:行者123 更新时间:2023-12-04 10:55:29 25 4
gpt4 key购买 nike

我正在尝试在 base R 中绘制带有数据点的条形图。

我正在使用 base R,因为不可能以简单的方式在 ggplot 中创建纹理填充(例如,请参阅 here,而 ggtexture 不会允许复杂的编辑)。

使用 barplot() 函数和 points(),我可以这样做:

library(tidyverse)

#Sample data
data <- iris %>%
group_by(Species) %>%
summarise(m = mean(Sepal.Length),
se = sd(Sepal.Length)/
sqrt(sum(!is.na(Sepal.Length)))) %>%
ungroup()

chart <- barplot(height=data$m, names=data$Species,
density = c(5, 5, 5),
angle = c(0,45,90),
col = "brown",
width = c(0.1,0.1,0.1),
font.axis = 2,
border = c("black"),
lwd = 2)

points(x = chart,
y = data$m)

enter image description here

但是,我想创建类似于下面的内容:

iris %>% 
group_by(Species) %>%
summarise(m = mean(Sepal.Length),
se = sd(Sepal.Length)/
sqrt(sum(!is.na(Sepal.Length)))) %>%
ungroup() %>%
ggplot(aes(Species, m,
group = Species,
color = Species,
shape = Species)) +
geom_bar(stat = "identity", fill="white",
color="black") +
geom_jitter(
aes(Species, Sepal.Length),
data = iris)

enter image description here

最佳答案

使用 barplot 输出作为标签将 Species 转换为因子。然后使用 as.numeric(as.character(x))) 方法转换回数字时,点出现在每个组的正确位置。

# op <- par(xpd=TRUE)
b <- barplot(with(iris, tapply(Sepal.Length, Species, mean)), density=c(5, 5, 5),
angle=c(0, 45, 90),
col="brown",
width=c(0.1, 0.1, 0.1),
font.axis=2,
border=c("black"),
lwd=2,
ylim=c(0, max(jitter(iris$Sepal.Length)) * 1.15) ## better use dynamic ylim
)
iris$Species.f <- factor(iris$Species, labels=b)
with(iris, points(jitter(as.numeric(as.character(iris$Species.f))),
jitter(Sepal.Length), pch=as.numeric(Species) + 14,
col=as.numeric(Species) + 1, cex=.8))
legend("topleft", title="Species", legend=levels(iris$Species),
pch=seq(levels(iris$Species)) + 14, col=seq(levels(iris$Species)) + 1,
horiz=TRUE, cex=.8)
box(lwd=2)
# par(op)

enter image description here

关于r - 带有数据点的 barplot() - base R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60702930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com