标签: gtable

gtable结构元素描述

如果我创建一个gtable并查看一些元素,我会看到例如:

test<-data.frame(x=1:20, y=21:40, facet.a=rep(c(1,2),10), facet.b=rep(c(1,2), each=20))
p <- qplot(data=test, x=x, y=y, facets=facet.b~facet.a)
# get gtable object
z <- ggplot_gtable(ggplot_build(p))
> names(z)

[1] "grobs"    "layout"   "widths"   "heights"  "respect"  "colnames" "name"    
[8] "gp"       "vp"  
    > z$widths
[1] 0.5lines            1grobwidth+0.5lines 0.620416666666666cm
[4] 1null               0.25lines           1null              
[7] 0.545041666666667cm 1lines 
Run Code Online (Sandbox Code Playgroud)

是否有详细的文件说明这些元素的价值对于创建的情节意味着什么?gtable文档仅记录了创建和修改gtables的功能.数据来自于7月5日发布的帖子.

r ggplot2 gtable

5
推荐指数
1
解决办法
641
查看次数

将tableGrob与ggplot2 y轴并置

有没有一种优雅的方法来将tableGrob行与轴断开对齐?

我想在R中并置一个tableGrob和ggplot图表(我需要重现以前版本的公共报告中使用的一些SAS输出).像这个最小的可重复的例子:

并列tableGrob和ggplot图表

这篇文章让我相当远 - tableGrob与图表的主体在同一个gtable行中; 但是,它需要大量的手动调整才能使tableGrob中的行与轴标签对齐.

我也找到了这篇文章.由于我正在发布一份公开报告,我宁愿不使用CRAN软件包中不易获得的代码.话虽如此,tableGrob的实验版本似乎接受高度作为论据.如果这个代码可以解决问题,我确实选择使用这个实验版本,我将如何计算合适的行高?

如果没有一种优雅的方式,我发现这些技巧是有帮助的:

  • 在tableGrob中设置fontsize和cex以匹配ggplot2
  • 将padding.v设置为tableGrob中的空间表行
  • 修改坐标限制以容纳列标签并与最后一行的底部对齐

我的MRE代码:

library(ggplot2)
library(gridExtra)
library(gtable)

theme_set(theme_bw(base_size = 8))
df <- head(mtcars,10)
df$cars <- row.names(df)
df$cars <- factor(df$cars, levels=df$cars[order(df$disp, decreasing=TRUE)], ordered=TRUE)
p <- ggplot(data=df, aes(x=hp, y=cars)) +
  geom_point(aes(x=hp, y=cars)) +
  scale_y_discrete(limits=levels(df$cars))+
  theme(axis.title.y = element_blank()) +
  coord_cartesian(ylim=c(0.5,length(df$cars)+1.5))
t <- tableGrob(df[,c("mpg","cyl","disp","cars")],
               cols=c("mpg","cyl","disp","cars"),
               gpar.coretext = gpar(fontsize = 8, lineheight = 1, cex = 0.8),
               gpar.coltext = gpar(fontsize = 8, lineheight = 1, cex = 0.8),
               show.rownames = FALSE,
               show.colnames = TRUE, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra gtable

5
推荐指数
1
解决办法
2476
查看次数

在r中的facet ggplot的每个面板上添加子表

我正在尝试使用facet_wrapR中的ggplot2包创建一套完整的图.

作为简化示例,我使用了ggplot2中包含的数据集mpg的子集

library(plyr)
library(ggplot2)
library(gtable)
library(gridExtra)

myData = subset(mpg, manufacturer == "audi" | manufacturer == "chevrolet")
myData = droplevels(myData)
Run Code Online (Sandbox Code Playgroud)

这是我绘制数据的代码:

p =  ggplot(myData, aes(x=hwy, y=cty, colour=model) )
p = p + facet_wrap( ~ manufacturer)#, scales="free") # sets panel division 
p = p + geom_point(size = 3) # sets points aspect
p = p + geom_smooth(stat="identity")
print(p)
Run Code Online (Sandbox Code Playgroud)

现在这里有一个棘手的部分...我有另一个数据框'indivParam',其中包含额外的信息,我想在图表上显示为一个表格.让我们说这个愚蠢的:

indivParam = ddply(myData, .(manufacturer  ,  model), summarize,
               var1 = unique(class),
               var2 = round(mean(displ)),
               var3 = round(mean(cyl)))
Run Code Online (Sandbox Code Playgroud)

我想要做的是在每个面板上添加一个子表,从indivParam中提取信息.例如,在图的第一个面板上添加下表:

tg = tableGrob(subset(indivParam, manufacturer …
Run Code Online (Sandbox Code Playgroud)

r facet ggplot2 gridextra gtable

5
推荐指数
1
解决办法
1311
查看次数

更改ggplot2中条带文本背景的高度不能按预期工作

###Load libraries

library(ggplot2)
library(gtable)

###Build plot

d <- ggplot(mtcars, aes(x=gear)) + 
            geom_bar(aes(y=gear), stat="identity", position="dodge") +
            facet_wrap(~cyl)

###Change height of strip text

g <- ggplotGrob(d)
g$heights[[3]] = unit(2,"in")
grid.newpage()
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)

获得的结果(ggplot2_2.0.0)

在此输入图像描述

预期结果(ggplot2_1.0.1)

在此输入图像描述

中土世界到底发生了什么?

r ggplot2 gtable

5
推荐指数
1
解决办法
487
查看次数

ggplot geom_point:如何设置自定义绘图符号的字体?

随着ggplot::geom_point我们能够设置使用绘图符号的任意字符scale_shape_manual.我将举例说明目的:使用三角形在每个单元格中创建一个具有两个值的热图:

require(ggplot2)

data <- data.frame(
    val = rnorm(40),
    grp = c(rep('a', 20), rep('b', 20)),
    x   = rep(letters[1:4], 5),
    y   = rep(letters[1:5], 4)
)

p <- ggplot(data, aes(x = x, y = y, color = val, shape = grp)) +
    geom_point(size = 18) +
    scale_shape_manual(values=c("\u25E4","\u25E2")) +
    theme_minimal() +
    theme(panel.grid = element_blank())

ggsave('triangle-tiles.pdf', device = cairo_pdf, width = 4.1, height = 3.5)
Run Code Online (Sandbox Code Playgroud)

带有geom_point的三角形热图

如果用于符号的字体具有这些特殊字符,则此方法可以正常工作.否则显然是失败的.我知道我们可以明确地定义字体并获得相同的结果geom_text:

require(dplyr)

data <- data %>% mutate(sym = ifelse(grp == 'a', "\u25E4", "\u25E2"))

p …
Run Code Online (Sandbox Code Playgroud)

r heatmap ggplot2 gtable

5
推荐指数
1
解决办法
438
查看次数

使用coord_equal()时将不同高度的多面ggplots垂直对齐

我正在尝试coord_equal()使用cowplot::plot_grid()或将两个FACETED ggplot对象组合在一起,egg::ggarrange()并垂直对齐它们。

egg::ggarrange()方法适用于UNFACETED地块,解决方案在此处发布。

但是,egg::ggarrange()当包含构面时,解决方案将失效。这些图已正确对齐,但是y轴的单位是x轴的单位的两倍。关于如何对此进行概括的任何建议?

dat1 <- data.frame(x = rep(1:10, 2), y = 1:20, z = rep(c("A", "B"), 10))
dat2 <- data.frame(x = 1:10, y = 1:10, z = rep(c("A", "B"), 5))
plot1 <- ggplot(dat1, aes(x=x, y=y)) + 
  geom_point() + coord_equal() + facet_wrap(~z)
plot2 <- ggplot(dat2, aes(x=x, y=y)) + 
  geom_point() + coord_equal() + facet_wrap(~z)
egg::ggarrange(plot1, plot2, ncol = 1)
Run Code Online (Sandbox Code Playgroud)

图片1

r ggplot2 gtable cowplot

5
推荐指数
1
解决办法
297
查看次数

在ggplot2 facet_wrap中跨列组合多个方面条

我试图在两个相邻面板上组合刻面条(总是有两个相邻面板具有相同的第一个 ID 变量,但有两种不同的场景,我们称它们为“A”和“B”)。我并不特别拘泥于gtable+grid解决方案,我试过了,但遗憾的是我不能使用facet_nested()ggh4x包(我不能我公司的安装在服务器上,由于已经到位的各种限制和所需的依赖-我看着只使用相关的代码,但由于依赖关系,这也不容易)。

我希望通过组合顶部刻面条来指示哪些面板“属于一起”,从而使基本图的最小可行示例更易于阅读,如下所示:

library(tidyverse)
library(gtable)
library(grid)

idx = 1:16

p1 = expand_grid(id=idx, id2=c("A", "B"), x=1:10) %>%
  mutate(y=rnorm(n=n())) %>%
  ggplot(aes(x=x,y=y)) +
  geom_jitter() +
  facet_wrap(~id + id2, nrow = 4, ncol=8)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

带有“1”的条带、带有“2”的条带等应该组合在一起(实际上它是一个稍长的文本,但这只是为了说明)。我试图为类似的情况调整答案(/sf/answers/2822131931/ - 谢谢@markus 再次找到它),但这就是我尝试过的。正如你在下面看到的,我生产的高度似乎是错误的。我认为这一定是我忽略/不理解的一些微不足道的事情。

# Combine strips for a ID
g <- ggplot_gtable(ggplot_build(p1))
strip <- gtable_filter(g, "strip-t", trim = FALSE)
stript <- which(grepl('strip-t', g$layout$name))
  
stript2 = stript[idx*2-1]
top <- strip$layout$t[idx*2-1]
# # Using the $b below instead of b = top[i]+1, …
Run Code Online (Sandbox Code Playgroud)

r facet ggplot2 gtable r-grid

5
推荐指数
2
解决办法
1345
查看次数

使用grid.arrange切断标题

我建立了一个函数,可以从@baptiste的答案中获得很多帮助,快速绘制表格.

plotTable<-function(data, title=NULL, footnote=NULL, fontsize=9, plotIt=TRUE, show.rownames=TRUE){
  # Generic method to plot tabular data

  # Built the base table with/without row names
  if(show.rownames){
    table <- tableGrob(data, theme=ttheme_default(
      core=list(fg_params=list(fontsize=fontsize)),
      colhead=list(fg_params=list(fontsize=fontsize)),
      rowhead=list(fg_params=list(fontsize=fontsize))))
  } else{
    table <- tableGrob(data, theme=ttheme_default(
      core=list(fg_params=list(fontsize=fontsize)),
      colhead=list(fg_params=list(fontsize=fontsize)),
      rowhead=list(fg_params=list(fontsize=fontsize))), rows=NULL)
  }

  # Set the padding
  padding <- unit(0.5,"line")

  # Add the title if it's not NULL
  if(!is.null(title)){
    title.grob <- textGrob(title, gp=gpar(fontsize=fontsize+3))
    table <- gtable_add_rows(table, heights = grobHeight(title.grob) + padding, pos = 0)
    table <- gtable_add_grob(table, list(title.grob), t=1, l=1, …
Run Code Online (Sandbox Code Playgroud)

r gridextra gtable

4
推荐指数
1
解决办法
2174
查看次数

如何更改ggplot中的一个特定方面

我在facet_grid()的帮助下创建了在ggplot中显示不同分数(0 - 100%)的饼图.然而,最后得分是结合其他得分的总得分,并且为了将其与其他得分更好地区分,我想更改该特定方面的参数.理想情况下,我想使facet-label变为粗体并将facet移动远离其他facet,但我不知道如何更改仅一个特定facet的参数.

library(ggplot2)
df <- data.frame(label = c("A", "B", "Total"), score = c(60, 70, 65))

ggplot(df, aes(x = "", y = score)) + 
geom_bar(width = 1, stat = "identity") + 
coord_polar("y", start=0) + scale_y_continuous(limits = c(0, 100)) + 
facet_grid(. ~ label)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r facet ggplot2 gtable

4
推荐指数
1
解决办法
215
查看次数

使用 gtable/grob 自定义 ggplot 中的标签元素位置

我正在使用 R 中的 ggplot 为 DC 创建 GIS 地图。我正在尝试自定义我的图例栏和标签。我可以使用 gtable_filter 移动图例键,但不能移动标签。我想像其他标签一样将最后一个标签“1”移动到其图例栏附近。任何帮助表示赞赏。 地图图像

我正在使用下面的 R 代码:

Data set looks like below

    head(d1930)

R Output:



     Simple feature collection with 6 features and 355 fields
            geometry type:  MULTIPOLYGON
            dimension:      XY
            bbox:           xmin: -77.0823 ymin: 38.89061 xmax: -77.0446 ymax: 38.94211
            epsg (SRID):    4326
            proj4string:    +proj=longlat +datum=WGS84 +no_defs
              fipsstate fipscounty  tract NHGISST NHGISCTY      GISJOIN    GISJOIN2 SHAPE_AREA SHAPE_LEN  X  GISJOIN.x.1 year cenv1_1 cenv8_1
            1        11        001 000001     110     0010 G11000100001 11000100001    1953567  8965.853  1 G11001000001 1930 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gtable r-grid

4
推荐指数
1
解决办法
1400
查看次数

标签 统计

gtable ×10

r ×10

ggplot2 ×9

facet ×3

gridextra ×3

r-grid ×2

cowplot ×1

heatmap ×1