- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个这样的情节:
这是一个马赛克图,其中一些组上方有一条黑线。我希望那条黑线也出现在图例上。在这个例子中,图例有 6 个级别,并且在级别 2 和 4 的方块上方我想要一条黑线。
我尝试过类似的事情:
How to draw lines outside of plot area in ggplot2但不幸的是,当我调整情节大小时,线条随着情节移动,而不是随着图例移动,它们最终会出现在错误的位置。
这是制作上面图的示例代码。
exampledata<-data.frame(var1Center=c(rep(.2, 6) ,rep(.5,6) ,rep(.8,6)),
var2Height=c(.2,.2,.2,.1,.1,.2, .1,.1,.05,.45,.1,.2, .4,.07,.03,.1,.35,.05),
var1=c(rep("Thing 1", 6), rep("Thing 2", 6), rep("Thing 3", 6)),
var2=c( rep(c("A", "B", "C","D", "E", "F"), 3)),
marginVar1=c(rep(.4,6) ,rep(.2,6), rep(.4,6)))
plotlines<-data.frame(xstart=c(0, 0,.4, .4, .6,.6), xstop=c(.4,.4, .6,.6, 1,1), value=c(.4, .7, .2,.7, .47, .6))
ggplot(exampledata, aes(var1Center, var2Height)) +
geom_bar(stat = "identity", aes(width = marginVar1, fill = var2)) +
scale_x_continuous(breaks=exampledata$var1Center, labels=exampledata$var1, expand=c(0,0))+
theme_bw()+scale_y_continuous(name="Proportion",expand=c(0,0))+
guides(fill = guide_legend(reverse=TRUE))+
theme(panel.border=element_blank(), panel.grid=element_blank())+
theme(axis.text.x=element_text(angle=90, hjust=1, vjust=.3))+
geom_segment(data=plotlines, aes(x=xstart, xend=xstop, y=value, yend=value))
最佳答案
这是一个编辑图例 grob 的解决方案。* 我在下面添加了一个更长的答案,显示了如何检查 grob 结构以帮助找到您可以编辑的属性。
*我只是在学习grobs,所以如果有人有关于如何添加的解决方案linesGrob()
传说,我很想看到它。
简答
p1 <- ggplot()... #Your original plot
gt <- ggplotGrob(pl) #Convert plot to grob
library(gtable); library(gridExtra)
leg <- gtable_filter(gt, "guide-box") #Extract the legend
#Modify the legend by adding a black line that is horizontal y = c(1,1)
#sub-grob 8 is the teal box D
leg$grobs[[1]]$grobs[[1]]$grobs[[8]]$children[[2]]$gp$col <- "black"
leg$grobs[[1]]$grobs[[1]]$grobs[[8]]$children[[2]]$y <- unit(c(1,1), "npc")
#sub-grob 12 is the brown box B
leg$grobs[[1]]$grobs[[1]]$grobs[[12]]$children[[2]]$gp$col <- "black"
leg$grobs[[1]]$grobs[[1]]$grobs[[12]]$children[[2]]$y <- unit(c(1,1), "npc")
#Plot first plot with no legend, then add modified legend.
p2 <- grid.arrange(p1 +theme(legend.position = "none"), leg,
ncol = 2,
widths = unit.c(unit(1, "npc") - sum(leg$width), sum(leg$width)))
$
和
[[]]
分别探索命名和未命名的列表元素。
str
命令显示对象的结构。
str(leg)
#List of 1
#$ grobs :List of 1
#..$ :List of 1
#.. ..$ grobs :List of 1
#.. .. ..$ 99_df28f764d4b38c6ac4aec87e00315c90:List of 20
#.. .. .. ..$ grobs :List of 20 #<--Here is where we can find the legend boxes
#.. .. .. .. ..$ :List of 10
#.. .. .. .. .. ..$ x :Class 'unit' atomic [1:1] 0.5
#.. .. .. .. .. .. .. ..- attr(*, "unit")= chr "npc"
#.. (snip)
#'leg' has a named element 'grobs' with an unnamed list (' :List of 1').
#The first element of this unnamed list has a named sub-element 'grobs'.
# which itself contains an unnamed list.
#The next command goes down these branches of 'leg' to the sub-elements.
leg$grobs[[1]]$grobs[[1]] #Elements of the legend are shown here
#TableGrob (10 x 6) "layout": 20 grobs
#z cells name grob
#1 1 ( 1-10, 1- 6) background rect[legend.background.rect.171]
#2 2 ( 2- 2, 2- 5) title text[guide.title.text.127]
#3 3 ( 4- 4, 2- 2) key-3-1-bg rect[legend.key.rect.141]
#4 4 ( 4- 4, 2- 2) key-3-1-1 gTree[GRID.gTree.142]
#5 5 ( 5- 5, 2- 2) key-4-1-bg rect[legend.key.rect.146]
#6 6 ( 5- 5, 2- 2) key-4-1-1 gTree[GRID.gTree.147]
#7 7 ( 6- 6, 2- 2) key-5-1-bg rect[legend.key.rect.151]
#8 8 ( 6- 6, 2- 2) key-5-1-1 gTree[GRID.gTree.152]
#9 9 ( 7- 7, 2- 2) key-6-1-bg rect[legend.key.rect.156]
#10 10 ( 7- 7, 2- 2) key-6-1-1 gTree[GRID.gTree.157]
#11 11 ( 8- 8, 2- 2) key-7-1-bg rect[legend.key.rect.161]
#12 12 ( 8- 8, 2- 2) key-7-1-1 gTree[GRID.gTree.162]
#13 13 ( 9- 9, 2- 2) key-8-1-bg rect[legend.key.rect.166]
#14 14 ( 9- 9, 2- 2) key-8-1-1 gTree[GRID.gTree.167]
#15 15 ( 4- 4, 4- 4) label-3-3 text[guide.label.text.129]
#16 16 ( 5- 5, 4- 4) label-4-3 text[guide.label.text.131]
#17 17 ( 6- 6, 4- 4) label-5-3 text[guide.label.text.133]
#18 18 ( 7- 7, 4- 4) label-6-3 text[guide.label.text.135]
#19 19 ( 8- 8, 4- 4) label-7-3 text[guide.label.text.137]
#20 20 ( 9- 9, 4- 4) label-8-3 text[guide.label.text.139]
#This table shows the structure of the legened,
# where cells indicate (min.X-max.X, min.Y-max.Y).
#The 8th element is one of the color keys as a gTree grob.
#Examining this legend key box in more detail:
leg$grobs[[1]]$grobs[[1]]$grobs[[8]]$children
#(rect[GRID.rect.153], lines[GRID.lines.154])
#'children' is composed 2 sub-elements (in an unnamed list): rectangle and lines.
#Exploring second sub-element (lines):
#Line properties
str(leg$grobs[[1]]$grobs[[1]]$grobs[[8]]$children[[2]])
#List of 6
#$ x :Class 'unit' atomic [1:2] 0 1
#.. ..- attr(*, "unit")= chr "npc"
#.. ..- attr(*, "valid.unit")= int 0
#$ y :Class 'unit' atomic [1:2] 0 1
#.. ..- attr(*, "unit")= chr "npc"
#.. ..- attr(*, "valid.unit")= int 0
#$ arrow: NULL
#$ name : chr "GRID.lines.154"
#$ gp :List of 4
#..$ col : logi NA
#..$ lwd : num 1.42
#..$ lineend: chr "butt"
#..$ lty : num 1
#..- attr(*, "class")= chr "gpar"
#$ vp : NULL
#- attr(*, "class")= chr [1:3] "lines" "grob" "gDesc"
#Here we see the line goes left-right with $x = c(0,1) and top bottom with $y = c(0,1).
# i.e. a bottom-left to top-right diagonal line.
#This line is not actually plotted because it has no color: $gp$col = NA
grid.draw(leg) #Show the legend
#y and gp$col are changed as noted above.
关于r - 在ggplot2中的图例的某些级别之间添加线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34648520/
我正在从 Stata 迁移到 R(plm 包),以便进行面板模型计量经济学。在 Stata 中,面板模型(例如随机效应)通常报告组内、组间和整体 R 平方。 I have found plm 随机效应
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我想要求用户输入整数值列表。用户可以输入单个值或一组多个值,如 1 2 3(spcae 或逗号分隔)然后使用输入的数据进行进一步计算。 我正在使用下面的代码 EXP <- as.integer(rea
当 R 使用分类变量执行回归时,它实际上是虚拟编码。也就是说,省略了一个级别作为基础或引用,并且回归公式包括所有其他级别的虚拟变量。但是,R 选择了哪一个作为引用,以及我如何影响这个选择? 具有四个级
这个问题基本上是我之前问过的问题的延伸:How to only print (adjusted) R-squared of regression model? 我想建立一个线性回归模型来预测具有 15
我在一台安装了多个软件包的 Linux 计算机上安装了 R。现在我正在另一台 Linux 计算机上设置 R。从他们的存储库安装 R 很容易,但我将不得不使用 安装许多包 install.package
我正在阅读 Hadley 的高级 R 编程,当它讨论字符的内存大小时,它说: R has a global string pool. This means that each unique strin
我们可以将 Shiny 代码写在两个单独的文件中,"ui.R"和 "server.R" , 或者我们可以将两个模块写入一个文件 "app.R"并调用函数shinyApp() 这两种方法中的任何一种在性
我正在使用 R 通过 RGP 包进行遗传编程。环境创造了解决问题的功能。我想将这些函数保存在它们自己的 .R 源文件中。我这辈子都想不通怎么办。我尝试过的一种方法是: bf_str = print(b
假设我创建了一个函数“function.r”,在编辑该函数后我必须通过 source('function.r') 重新加载到我的全局环境中。无论如何,每次我进行编辑时,我是否可以避免将其重新加载到我的
例如,test.R 是一个单行文件: $ cat test.R # print('Hello, world!') 我们可以通过Rscript test.R 或R CMD BATCH test.R 来
我知道我可以使用 Rmd 来构建包插图,但想知道是否可以更具体地使用 R Notebooks 来制作包插图。如果是这样,我需要将 R Notebooks 编写为包小插图有什么不同吗?我正在使用最新版本
我正在考虑使用 R 包的共享库进行 R 的站点安装。 多台计算机将访问该库,以便每个人共享相同的设置。 问题是我注意到有时您无法更新包,因为另一个 R 实例正在锁定库。我不能要求每个人都关闭它的 R
我知道如何从命令行启动 R 并执行表达式(例如, R -e 'print("hello")' )或从文件中获取输入(例如, R -f filename.r )。但是,在这两种情况下,R 都会运行文件中
我正在尝试使我当前的项目可重现,因此我正在创建一个主文档(最终是一个 .rmd 文件),用于调用和执行其他几个文档。这样我自己和其他调查员只需要打开和运行一个文件。 当前设置分为三层:主文件、2 个读
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
我的 R 包中有以下描述文件 Package: blah Title: What the Package Does (one line, title case) Version: 0.0.0.9000
有没有办法更有效地编写以下语句?accel 是一个数据框。 accel[[2]]<- accel[[2]]-weighted.mean(accel[[2]]) accel[[3]]<- accel[[
例如,在尝试安装 R 包时 curl作为 usethis 的依赖项: * installing *source* package ‘curl’ ... ** package ‘curl’ succes
我想将一些软件作为一个包共享,但我的一些脚本似乎并不能很自然地作为函数运行。例如,考虑以下代码块,其中“raw.df”是一个包含离散和连续类型变量的数据框。函数“count.unique”和“squa
我是一名优秀的程序员,十分优秀!