首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将第4个要素添加到r中ggplot2中的平铺地块

将第4个要素添加到r中ggplot2中的平铺地块
EN

Stack Overflow用户
提问于 2021-03-01 20:43:42
回答 1查看 83关注 0票数 0

我找到了解释如何向geom_tile图添加模式的following example,但我无法通过执行以下步骤来显示我的图。附件中有几行数据:

数据:

代码语言:javascript
运行
复制
> dput(coupler.graph)
structure(list(Category = c("HBC", "TC", "BSC", "GSC", "GSC", 
"SSC", "SSC", "GSC", "GSC", "SSC", "SSC", "SSC", "HBC", "TC", 
"BSC", "BSC", "GSC", "GSC", "SSC", "HBC", "HBC", "TC", "TC", 
"BSC", "GSC", "GSC", "GSC", "GSC", "GSC", "GSC", "TC", "BSC", 
"BSC", "GSC", "GSC"), `Bar Size` = c("No. 5", "No. 5", "No. 5", 
"No. 5", "No. 5", "No. 6", "No. 6", "No. 6", "No. 6", "No. 8", 
"No. 8", "No. 8", "No. 8", "No. 8", "No. 8", "No. 8", "No. 8", 
"No. 8", "No. 10", "No. 10", "No. 10", "No. 10", "No. 10", "No. 10", 
"No. 10", "No. 10", "No. 10", "No. 11", "No. 11", "No. 14", "No. 18", 
"No. 18", "No. 18", "No. 18", "No. 18"), `No. Bars` = c(3, 9, 
3, 4, 2, 42.5, 42.5, 3, 4, 30, 30, 30, 7, 9, 5, 1, 10, 11, 9, 
11, 11, 7, 20, 13, 5, 10, 10, 4, 4, 0, 4, 2, 2, 3, 1), Failure = c("Bar fracture", 
"Bar fracture", "Bar fracture", "Bar pullout", "Bar fracture", 
"Bar pullout", "Bar fracture", "Coupler failure", "Bar fracture", 
"Bar fracture inside grip", "Bar pullout", "Bar fracture", "Bar fracture", 
"Bar fracture", "Bar fracture", "Bar fracture", "Bar fracture", 
"0", "Bar fracture inside grip", "Bar fracture inside grip", 
"Bar fracture", "Coupler failure", "Bar fracture", "Bar fracture", 
"Bar pullout", "Bar fracture", "Coupler failure", "Bar fracture", 
"Coupler failure", NA, "Coupler failure", "Bar fracture", "Bar pullout", 
"Bar fracture", "Coupler failure"), x = c("1-3", "7-9", "1-3", 
"3-5", "1-3", "30-90", "30-90", "1-3", "3-5", "20-30", "20-30", 
"20-30", "5-7", "7-9", "3-5", NA, "9-11", "9-11", "7-9", "9-11", 
"9-11", "5-7", "15-20", "11-15", "3-5", "9-11", "9-11", "3-5", 
"3-5", NA, "3-5", "1-3", "1-3", "1-3", NA)), row.names = c(NA, 
-35L), class = c("tbl_df", "tbl", "data.frame"))

我使用的是示例中解释的ggpattern

获取无模式绘图的原始代码:

代码语言:javascript
运行
复制
plot1 <- ggplot(coupler.graph) + aes(x = Category, y = fct_inorder(`Bar Size`), fill = factor(x, 
                                    levels = c("0", "1-3", "3-5", "5-7", "7-9",
                                               "9-11", "11-15",  "15-20","20-30", "30-90"))) +
 geom_tile(width=0.9, height=0.9) + theme_classic() + scale_fill_manual(labels = factor(labels), values = values) +
 labs(x = "Splicer Type", y = "Bar Size") +
 theme(plot.title = element_blank(), axis.text =  element_text(color = "black", size = 12), axis.ticks.x = element_blank(),
       axis.line = element_line(color = "black", size = 0.2), axis.ticks.y = element_line(color = "black", size = 0.2),
       axis.title.y = element_text(color = "black", size = 16, margin = margin(0,40,0,0)), 
       axis.title.x = element_text(color = "black", size = 16, margin = margin(35,0,0,0)),
       legend.title = element_blank(), legend.text = element_text(color = "black", size = 12)) 

没有添加图案的绘图将导致:

尝试获取模式,但每次都只返回空白图(请注意,我使用ggplotly使这些图具有交互性,以便进行HTML输出)。

代码语言:javascript
运行
复制
plot1 <- ggplot(coupler.graph) + aes(x = Category, y = fct_inorder(`Bar Size`), fill = factor(x, 
                                    levels = c("0", "1-3", "3-5", "5-7", "7-9",
                                               "9-11", "11-15",  "15-20","20-30", "30-90"))) +
 geom_tile_pattern(width=0.9, height=0.9, pattern_color = NA,
                    pattern_fill = "black",
                    pattern_angle = 45,
                    pattern_density = 0.5,
                    pattern_spacing = 0.025,
                    pattern_key_scale_factor = 1) + theme_classic() + 
  scale_pattern_manual(values = c(`Bar Fracture` = "none", `Bar pullout` = "none", `Coupler Failure` = "circles")) +
  scale_fill_manual(labels = factor(labels), values = values) +
 labs(x = "Splicer Type", y = "Bar Size") +
 theme(plot.title = element_blank(), axis.text =  element_text(color = "black", size = 12), axis.ticks.x = element_blank(),
       axis.line = element_line(color = "black", size = 0.2), axis.ticks.y = element_line(color = "black", size = 0.2),
       axis.title.y = element_text(color = "black", size = 16, margin = margin(0,40,0,0)), 
       axis.title.x = element_text(color = "black", size = 16, margin = margin(35,0,0,0)),
       legend.title = element_blank(), legend.text = element_text(color = "black", size = 12)) +
  guides(pattern = guide_legend(override.aes = list(fill = "white")))

我正在尝试将Failure列映射到平铺图的模式。Failure列只有三个类别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-05 01:22:25

在这里,我用模式创建了一个变量,这样我们就可以使用scale_pattern_identity

代码语言:javascript
运行
复制
labels <- factor(c("0", "1-3", "3-5", "5-7", "7-9", "9-11", "11-15", "15-20","20-90"), 
                 levels = c("0", "1-3", "3-5", "5-7", "7-9", "9-11", "11-15", "15-20","20-30","30-90")) 
values <- c("white", "#ffffd9", "#edf8b1", "#c7e9b4", "#7fcdbb", "#41b6c4", "#1d91c0", "#225ea8", "#253494","#081d58")

library(tidyverse); library(ggpattern)
coupler.graph %>%
  mutate(pattern = case_when(
    Failure %>% str_detect("Coupler") ~ "circle",
    is.na(Failure) ~ "none",
    TRUE ~ "none"
  )) %>% 

ggplot() + 
  aes(x = Category, y = fct_inorder(`Bar Size`), pattern = pattern,
      fill = factor(x, levels = c("0", "1-3", "3-5", "5-7", "7-9",
                                  "9-11", "11-15",  "15-20","20-30", "30-90"))) +
  geom_tile_pattern(width=0.9, height=0.9, pattern_color = NA, 
                    pattern_fill = "black",
                    pattern_angle = 45,
                    pattern_density = 0.5,
                    pattern_spacing = 0.025,
                    pattern_key_scale_factor = 1) + 
  theme_classic() + 
  scale_pattern_identity() +
  scale_fill_manual(labels = factor(labels), values = values) +
  labs(x = "Splicer Type", y = "Bar Size") +
  theme(plot.title = element_blank(), axis.text =  element_text(color = "black", size = 12), 
        axis.ticks.x = element_blank(),
        axis.line = element_line(color = "black", size = 0.2), 
        axis.ticks.y = element_line(color = "black", size = 0.2),
        axis.title.y = element_text(color = "black", size = 16, margin = margin(0,40,0,0)), 
        axis.title.x = element_text(color = "black", size = 16, margin = margin(35,0,0,0)),
        legend.title = element_blank(), legend.text = element_text(color = "black", size = 12)) +
  guides(pattern = guide_legend(override.aes = list(fill = "black"))),
     fill = guide_legend(override.aes = list(pattern = "none")))

(顺便说一句,我的默认绘图与您的不同,例如使用NA填充,所以我怀疑您生成图形的代码可能与问题中的代码有所不同。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66422388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档