首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >tableGrob中不寻常的白色矩形

tableGrob中不寻常的白色矩形
EN

Stack Overflow用户
提问于 2022-05-18 17:23:31
回答 1查看 61关注 0票数 0

一段时间前,我问this question如何将ggplot图例与R中的一个表结合起来,以使图例更具信息性。这些答案很有帮助,直到最近,我才开始使用公认的解决方案,没有任何问题。现在,我尝试将这种方法应用于稍微修改过的脚本,由于某种原因,我在图例的顶部得到了一个意想不到的白色矩形。本质上,我从一个表中创建了一个tableGrob,并将其放置在ggplot图例的旁边,使它们看起来是相同的元素。为了清晰起见,我省略了其他一些格式。下面我发布了一些示例图片:

对于我的生活,我不知道为什么会有那个长方形,也不知道如何移除它。任何洞察力都将不胜感激。

代码:

代码语言:javascript
运行
复制
library(dplyr)
library(ggplot2)
library(gridExtra)
library(grid)
library(patchwork)

#Data
fullData <- structure(list(error = c(0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 
5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 
5, 6), prob.ed = c(0.005, 0.041, 0.298, 0.753, 0.966, 0.998, 
0.999, 0.005, 0.091, 0.598, 0.949, 0.997, 0.998, 0.999, 0.005, 
0.091, 0.598, 0.949, 0.997, 0.998, 0.999, 0.007, 0.261, 0.875, 
0.996, 1, 1, 1, 0.038, 0.568, 0.983, 1, 1, 1, 1), prob.fr = c(0.005, 
0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 
0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 
0.005, 0.005, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 
0.038, 0.038, 0.038, 0.038, 0.038, 0.038, 0.038), N = c(2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), rules = c("13SD", "13SD", 
"13SD", "13SD", "13SD", "13SD", "13SD", "13SD-22SD", "13SD-22SD", 
"13SD-22SD", "13SD-22SD", "13SD-22SD", "13SD-22SD", "13SD-22SD", 
"13SD-22SD-R4SD", "13SD-22SD-R4SD", "13SD-22SD-R4SD", "13SD-22SD-R4SD", 
"13SD-22SD-R4SD", "13SD-22SD-R4SD", "13SD-22SD-R4SD", "13SD-22SD-R4SD-41SD", 
"13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD", 
"13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD", 
"13SD-22SD-R4SD-41SD-Xbar", "13SD-22SD-R4SD-41SD-Xbar", "13SD-22SD-R4SD-41SD-Xbar", 
"13SD-22SD-R4SD-41SD-Xbar", "13SD-22SD-R4SD-41SD-Xbar", "13SD-22SD-R4SD-41SD-Xbar", 
"13SD-22SD-R4SD-41SD-Xbar")), row.names = c(NA, -35L), class = "data.frame")

#Table for tableGrob
critTable <- structure(list(error = c(7, 7, 7, 7, 7), prob.ed = c(0.192, 0.456, 
0.456, 0.77, 0.962), prob.fr = c(0.005, 0.005, 0.005, 0.007, 
0.038), N = c(2, 2, 2, 2, 2), rules = c("13SD", "13SD-22SD", 
"13SD-22SD-R4SD", "13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD-Xbar"
)), row.names = c(NA, -5L), class = "data.frame")

#ggplot
plot <- plot <- ggplot(fullData, aes(x = error, y = prob.ed, group = rules, colour = as.factor(rules))) +
  geom_vline(xintercept = 1.75, colour = "red", linetype = "dashed") +
  geom_hline(yintercept = 0.90, linetype = "dashed") +
  geom_line(data = full.data %>%
              group_by(rules) %>%
              do({tibble(error = seq(min(.$error), max(.$error),length.out=100),
                  prob.ed = pchip(.$error, .$prob.ed, error))}),
            size = 1) +
  scale_x_continuous(labels = full.data$error, breaks = full.data$error, expand = c(0, 0.05)) +
  scale_y_continuous(expand = expansion(add = c(0.01, 0.01))) +
  scale_color_brewer(palette = "Dark2") +
  theme_bw() +
  theme(
    legend.position=c(0.93,0.2075),
    legend.title=element_blank(),
    legend.background = element_blank(),
    legend.key.size = unit(0.687, "cm"),
    legend.text = element_text(size = 12))

#tableGrob
table <- tableGrob(critTable %>%
                     select(prob.fr,
                            prob.ed,) %>%
                     rename(`Prb FR` = prob.fr,
                            `Prb ED` = prob.ed) %>%
                     mutate(Rules = ""),
                   rows = NULL,
                   theme = ttheme_minimal())

#ggplot + tableGrob
plot <- plot + inset_element(table,
                             left = 0.65, bottom = 0.2, right = 0.9, top = .3, align_to = 'full')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-18 18:04:00

我稍微修改了代码(添加了:library(pracma)),在ggplot中的一些位置将full.data更改为fullData。解决方案并不完全是期望的输出。但干预应该是个好的开始。

因此,由ttheme_minimal tableGrob.中的引起的白色矩形你可以适应gridExtra::ttheme_default()

我更喜欢像这里所建议的那样,r - tableGrob background (但不知怎的更新,以任何方式识别)添加theme_void()并调整左、右、上、下等位置.

代码语言:javascript
运行
复制
library(dplyr)
library(ggplot2)
library(gridExtra)
library(grid)
library(patchwork)
library(pracma)
#install.packages("pracma")
#Data
fullData <- structure(list(error = c(0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 
                                     5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 
                                     5, 6), prob.ed = c(0.005, 0.041, 0.298, 0.753, 0.966, 0.998, 
                                                        0.999, 0.005, 0.091, 0.598, 0.949, 0.997, 0.998, 0.999, 0.005, 
                                                        0.091, 0.598, 0.949, 0.997, 0.998, 0.999, 0.007, 0.261, 0.875, 
                                                        0.996, 1, 1, 1, 0.038, 0.568, 0.983, 1, 1, 1, 1), prob.fr = c(0.005, 
                                                                                                                      0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 
                                                                                                                      0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 
                                                                                                                      0.005, 0.005, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 
                                                                                                                      0.038, 0.038, 0.038, 0.038, 0.038, 0.038, 0.038), N = c(2, 2, 
                                                                                                                                                                              2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
                                                                                                                                                                              2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), rules = c("13SD", "13SD", 
                                                                                                                                                                                                                             "13SD", "13SD", "13SD", "13SD", "13SD", "13SD-22SD", "13SD-22SD", 
                                                                                                                                                                                                                             "13SD-22SD", "13SD-22SD", "13SD-22SD", "13SD-22SD", "13SD-22SD", 
                                                                                                                                                                                                                             "13SD-22SD-R4SD", "13SD-22SD-R4SD", "13SD-22SD-R4SD", "13SD-22SD-R4SD", 
                                                                                                                                                                                                                             "13SD-22SD-R4SD", "13SD-22SD-R4SD", "13SD-22SD-R4SD", "13SD-22SD-R4SD-41SD", 
                                                                                                                                                                                                                             "13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD", 
                                                                                                                                                                                                                             "13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD", 
                                                                                                                                                                                                                             "13SD-22SD-R4SD-41SD-Xbar", "13SD-22SD-R4SD-41SD-Xbar", "13SD-22SD-R4SD-41SD-Xbar", 
                                                                                                                                                                                                                             "13SD-22SD-R4SD-41SD-Xbar", "13SD-22SD-R4SD-41SD-Xbar", "13SD-22SD-R4SD-41SD-Xbar", 
                                                                                                                                                                                                                             "13SD-22SD-R4SD-41SD-Xbar")), row.names = c(NA, -35L), class = "data.frame")

#Table for tableGrob
critTable <- structure(list(error = c(7, 7, 7, 7, 7), prob.ed = c(0.192, 0.456, 
                                                                  0.456, 0.77, 0.962), prob.fr = c(0.005, 0.005, 0.005, 0.007, 
                                                                                                   0.038), N = c(2, 2, 2, 2, 2), rules = c("13SD", "13SD-22SD", 
                                                                                                                                           "13SD-22SD-R4SD", "13SD-22SD-R4SD-41SD", "13SD-22SD-R4SD-41SD-Xbar"
                                                                                                   )), row.names = c(NA, -5L), class = "data.frame")

#ggplot
plot <- ggplot(fullData, aes(x = error, y = prob.ed, group = rules, colour = as.factor(rules))) +
  geom_vline(xintercept = 1.75, colour = "red", linetype = "dashed") +
  geom_hline(yintercept = 0.90, linetype = "dashed") +
  geom_line(data = fullData %>%
              group_by(rules) %>%
              do({tibble(error = seq(min(.$error), max(.$error),length.out=100),
                         prob.ed = pchip(.$error, .$prob.ed, error))}),
            size = 1) +
  scale_x_continuous(labels = fullData$error, breaks = fullData$error, expand = c(0, 0.05)) +
  scale_y_continuous(expand = expansion(add = c(0.01, 0.01))) +
  scale_color_brewer(palette = "Dark2") +
  theme_bw() +
  theme(
    legend.position=c(0.93,0.2075),
    legend.title=element_blank(),
    legend.background = element_blank(),
    legend.key.size = unit(0.687, "cm"),
    legend.text = element_text(size = 12))

#tableGrob
table <- tableGrob(critTable %>%
                     select(prob.fr,
                            prob.ed,) %>%
                     rename(`Prb FR` = prob.fr,
                            `Prb ED` = prob.ed) %>%
                     mutate(Rules = ""),
                   rows = NULL,
                   theme = ttheme_minimal())


#ggplot + tableGrob
plot + inset_element(table,
                     left = 0.8, bottom = 0.2, 
                     right = 0.9, top = .24, align_to = 'panel')+
  theme_void()

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

https://stackoverflow.com/questions/72293508

复制
相关文章

相似问题

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