docs.ggplot2.org目前提供的功能文档非常少ggplotGrob.在洛桑联邦理工学院的网站是一点点更多的信息,但它仍然不是非常有帮助.
您能否提供一个关于该功能可以做什么的简短教程ggplotGrob?
我遇到了一种情况,我希望创建一个由三个分组变量构成的图.要做到这一点,我会简单地使用facet_grid(f1 ~ f2 + f3),但问题是f2的标签是多余的,并且让它们跨越f3嵌套的f3的方面会更好.
MWE:
library('tibble')
library('ggplot2')
df <- tribble(
~x, ~y, ~f1, ~f2, ~f3,
0.5, 0.5, "a", "a", "a",
0.5, 0.5, "b", "a", "a",
0.5, 0.5, "a", "b", "a",
0.5, 0.5, "b", "b", "a",
0.5, 0.5, "a", "a", "b",
0.5, 0.5, "b", "a", "b",
0.5, 0.5, "a", "b", "b",
0.5, 0.5, "b", "b", "b"
)
p <- ggplot(df, aes(x = x, y = y)) +
geom_point() +
facet_grid(f1 ~ f2 + f3)
Run Code Online (Sandbox Code Playgroud)
同样,我希望将f2的标签组合在一起,这样它们就不那么多余了.
编辑:这与其他问题的不同之处在于,它询问如何使用现有分组修改构面而不是添加新构图.
添加辅助y轴,缩放原始y轴之一.这个话题并不新鲜.它已被触及时间,例如在这个ggplot2 google groups线程上.继哈德利的意见,我试图通过添加辅助y轴geom_vline,geom_segment和geom_text.但是,它仍然很难看.
所以我会请求你帮助完善它.我想很多ggplot2用户会对这个主题感兴趣并且更喜欢你的专业知识或贡献.提前致谢.
#########################################
# what I have gotten.
library(ggplot2)
# build up a box plot
p <- ggplot(mtcars, aes(factor(cyl), mpg))
# add the secondary y axis on right side of the plot
p + geom_boxplot() + geom_vline(xintercept = 3.5) +
geom_segment(aes(x=3.49, y=c(7,14,21,28), xend = 3.52, yend = c(7,14,21,28))) +
geom_text(aes(x=3.55, y=c(7,14,21,28), label=c(7,14,21,28)))
Run Code Online (Sandbox Code Playgroud) 我想知道如何在ggplot2中添加facet标题
ggplot(diamonds, aes(cut)) + geom_bar() + facet_grid(color ~ clarity)
Run Code Online (Sandbox Code Playgroud)
并更改图例标题
ggplot(diamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我想知道是否可以使用ggplot2创建一个包含图像的多图(如facet):

我不知道如何安排图像数据传递给它们geom_raster()或如何在数据框中包含图像......
我试过的:
> img1 <- readPNG('1.png')
> img2 <- readPNG('2.png')
> img3 <- readPNG('3.png')
> test <- data.frame(c(1,2,3),c(5,2,7),c(img1,img2,img3))
> nrow(test)
[1] 4343040
Run Code Online (Sandbox Code Playgroud)
我已经有了一个问题,建立一个内部图像的数据框...每3行重复一次(我想每像素一次).
我正在尝试生成ggplot具有透明背景的对象的png文件.当我直接使用ggplot对象时,panel.background=element_rect(fill = "transparent",colour = NA)我得到了我想要的结果.
我现在正在尝试对绘图进行一些修改(在这样的方面添加标签如何在ggplot2中向facet添加常规标签?)
在绘制修改后的gtable对象时,背景为浅灰色,带有细白线,而不是获得透明背景.

而如果我ggplot直接绘制对象,它确实支持透明度

这是我正在使用的代码:
data <- data.table(a = seq(1,5), b=sample.int(5,50,replace=TRUE), c=rnorm(100))
plotSlices <- function(input, rowfacet, colfacet, metric, label, facetlabels=FALSE){
calc <- substitute(metric)
bygroup<-c(rowfacet,colfacet)
aggregates <- input[,eval(calc),by=bygroup]
chart <- ggplot(aggregates) +
geom_bar(stat="identity") +
aes(x="", y=V1, fill=V1>0) +
facet_grid(as.formula(sprintf("%s ~ %s", rowfacet, colfacet))) +
coord_flip() +
xlab("") +
ylab(label) +
theme(legend.position = "none",
axis.title=element_text(size=16, color="white"),
axis.ticks.y=element_blank(),
panel.grid.major.y=element_blank(),
panel.grid.major.y=element_line(colour = "grey25"),
panel.grid.minor.x=element_blank(),
plot.background=element_rect(fill = "transparent",colour = NA),
panel.background=element_rect(fill …Run Code Online (Sandbox Code Playgroud) 这是一些生成具有两组方面的图形的最小代码.
library("ggplot2", quietly = TRUE, warn.conflicts = FALSE)
library("RColorBrewer", quietly = TRUE, warn.conflicts = FALSE)
val.a <- rnorm(10)
val.b <- rnorm(10)
val.c <- c("A","B","A","A","B","B","B","B","A","B")
val.d <- c("D","D","E","D","E","E","E","D","D","E")
val.e <- rnorm(10)
maya <- data.frame(val.a,val.b,val.c,val.d,val.e)
ggplot(maya, aes(x=val.a, y=val.b)) +
geom_point(shape=20,size=3, aes(colour=val.e)) +
facet_grid(val.c~val.d) +
xlab("Leonardo") + ylab("Michaelangelo") +
scale_colour_gradientn(colours=brewer.pal(9,"YlGnBu"), name="Splinter")
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何添加整个构面标签,以便名称Donatello和Raphael位于顶部和右侧轴上.
我在SO上看到了一些类似的解决方案,但我无法对代码进行反复无常的研究.请问你能否解答我的难题?
类似的问题在这里,但如果我有两个以上的方面,它就失败了.标签显示在图表内的某处.有没有办法让这个工作适用于一般情况?
所以我在上面的链接上尝试了rawr的解决方案,最终在多个列的同一个地方.这是更新为rawr解决方案的代码,但是它产生了意外的标签(对我来说因为我不理解解决方案).
library("ggplot2", quietly = TRUE, warn.conflicts = FALSE)
library("RColorBrewer", quietly = TRUE, warn.conflicts = FALSE)
val.a <- rnorm(20)
val.b <- rnorm(20)
val.c <- c("A","B","C","D","E","F","G","H","I","J")
val.d <- c("A","B","C","D","E","F","G","H","I","J")
val.e …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,由分布在两个位置(即和)的八个站点(即A、B、C... )组成。我已经为每个站点制作了一个数字,但是,我想添加一个额外的列标题来表示该站点的位置。我怎样才能做到这一点?HNorthSouthfacet_wrap()
示例数据
library(ggplot2)
library(dplyr)
set.seed(123)
df <- data.frame(matrix(ncol = 4, nrow = 24))
colnames(df)[1:4] <- c('location','site','x','y')
df$location <- rep(c('North','North','North','South','South','South'),4)
df$site <- c('A','A','A','E','E','E','B','B','B','F','F','F',
'C','C','C','G','G','G','D','D','D','H','H','H')
df$x <- rep(seq(0,12,4),6)
df$y <- rnorm(24,50,20)
df
Run Code Online (Sandbox Code Playgroud)
示例图(缺少辅助标头)
df %>%
mutate(across(site, factor, levels = c('A','B','E','F',
'C','D','G','H'))) %>%
ggplot(aes(x = x, y = y)) +
geom_point() +
geom_line() +
scale_x_continuous(breaks = seq(0,12,3),
limits = c(0,12)) +
scale_y_continuous(breaks = seq(0,max(df$y),5)) +
theme_bw() +
facet_wrap(~site, nrow = 2)
Run Code Online (Sandbox Code Playgroud)
这是一个类似的问题( …
我有这个数据框:
> str(DF)
'data.frame': 14084 obs. of 6 variables:
.
.
.
$ Variables: chr "Height" "Height" "Height" "Height" ...
$ Values : num 245 129 301 162 123 125 115 47 46 135 ...
$ Year : Factor w/ 2 levels "2015","2016": 1 1 1 1 1 1 1 1 1 1 ...
Run Code Online (Sandbox Code Playgroud)
我使用facet_wrap()自由轴刻度将图分成两个小平面(分为两列)。
ggplot(data = DF, aes(x = Year, y = Values)) +
geom_boxplot() +
facet_wrap("Variables", scales = "free")
Run Code Online (Sandbox Code Playgroud)
我的问题是:
两个构面共享一个共同的y轴标题。但是,我想为两个方面提供两个单独的y轴标题。常见的x轴标题对我来说很好。
我碰到了这个问题, 使用带有facet_wrap的ggplot2显示不同的轴标签, 但是它并不能解决我想要的问题,因为我不想失去顶部的切面标签。而且,我的构面是水平排列的。 …