gpt4 book ai didi

r - 如何在 ggplot 的条形图中添加影线、条纹或其他图案或纹理?

转载 作者:行者123 更新时间:2023-12-03 16:45:06 47 4
gpt4 key购买 nike

假设我有一个带有序数变量和一个分类变量的数据:

set.seed(35)
df <- data.frame(Class = factor(rep(c(1,2),times = 80), labels = c("Math","Science")),
StudyTime = factor(sort(sample(1:4, 16, prob = c(0.25,0.3,0.3,0.15), replace = TRUE)),labels = c("<5","5-10","10-20",">20")),
Nerd = factor(sapply(rep(c(0.1,0.3,0.5,0.8),c(30,50,50,30)), function(x)sample(c("Nerd","NotNerd"),size = 1, prob = c(x,1-x))),levels = c("NotNerd","Nerd")))

可以用 ggplotgeom_barx , fillalpha (或 color )美学映射来可视化这些变量之间的关系。
ggplot(data = df, aes(x = Class, fill = StudyTime, alpha = Nerd)) + 
geom_bar(position = "dodge", color = "black") +
scale_alpha_manual(values = c(Nerd = 0.5, NotNerd = 1)) +
scale_fill_manual(values = colorRampPalette(c("#0066CC","#FFFFFF","#FF8C00"))(4)) +
labs(x = "Class", y = "Number of Students", alpha = "Nerd?") +
theme(legend.key.height = unit(1, "cm"))

enter image description here

然而, alphacolor不理想。更好的选择可能是应用条纹或交叉影线等图案。

接受的答案 this question从 10 多年前开始说要使用颜色,而 the most upvoted answer (虽然聪明)使用了 100 多行代码。

This question收到了一些赞成票,但没有新的答案。

有没有更好的选择来添加一个模式,比如可以在这里看到?

enter image description here

最佳答案

一种方法是使用 ggpattern Mike FC 编写的包(无从属关系):

library(ggplot2)
#remotes::install_github("coolbutuseless/ggpattern")
library(ggpattern)
ggplot(data = df, aes(x = Class, fill = StudyTime, pattern = Nerd)) +
geom_bar_pattern(position = position_dodge(preserve = "single"),
color = "black",
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.1,
pattern_spacing = 0.025,
pattern_key_scale_factor = 0.6) +
scale_fill_manual(values = colorRampPalette(c("#0066CC","#FFFFFF","#FF8C00"))(4)) +
scale_pattern_manual(values = c(Nerd = "stripe", NotNerd = "none")) +
labs(x = "Class", y = "Number of Students", pattern = "Nerd?") +
guides(pattern = guide_legend(override.aes = list(fill = "white")),
fill = guide_legend(override.aes = list(pattern = "none")))

enter image description here

该软件包似乎支持许多常见的几何形状。这是使用 geom_tile 的示例将连续变量与分类变量组合:
set.seed(40)
df2 <- data.frame(Row = rep(1:9,times=9), Column = rep(1:9,each=9),
Evaporation = runif(81,50,100),
TreeCover = sample(c("Yes", "No"), 81, prob = c(0.3,0.7), replace = TRUE))

ggplot(data=df2, aes(x=as.factor(Row), y=as.factor(Column),
pattern = TreeCover, fill= Evaporation)) +
geom_tile_pattern(pattern_color = NA,
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.5,
pattern_spacing = 0.025,
pattern_key_scale_factor = 1) +
scale_pattern_manual(values = c(Yes = "circle", No = "none")) +
scale_fill_gradient(low="#0066CC", high="#FF8C00") +
coord_equal() +
labs(x = "Row",y = "Column") +
guides(pattern = guide_legend(override.aes = list(fill = "white")))

enter image description here

关于r - 如何在 ggplot 的条形图中添加影线、条纹或其他图案或纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62393159/

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