拼布中色标的水平对齐
Horizontal alignment of colour scales in patchwork
我正在使用包 patchwork
垂直组合多个 ggplot2
图。我希望每个图的比例都直接在另一个上方,而不管比例名称的长度如何。目前,比例尺并未相互对齐。
如果可以的话,我愿意使用 ggpubr
或 facet_grid()
,但我已经看到这些方面 doesn't allow multiple scales,但我还没有找到任何解决方案使用 ggpubr
library(ggplot2)
library(patchwork)
set.seed(0)
testdata <- data.frame(x=1:10, y=1:10, col=runif(10))
g1 <- ggplot(testdata, aes(x=x,y=y,col=col)) + geom_point() +
scale_color_gradient(name="Short")
g2 <- ggplot(testdata, aes(x=x,y=y,col=col)) + geom_point() +
scale_color_gradient(name="A rather longer name")
g1/g2
ggsave("testfile.tiff", units = "mm", device="tiff",
width=100, height=100, dpi = 100)
理想输出:
我也很想知道可以解决这个问题的拼凑参数,但我认为没有(如果我错了请纠正我)。您可能已经注意到 Hadley 的回答已有 10 多年历史,从那时起人们就一直在研究 ggplot2。 ggnewscale
包解决了每个图有多个比例的问题。这是使用多个色阶的多面方法:
library(ggplot2)
library(ggnewscale)
set.seed(0)
testdata <- data.frame(x=1:10, y=1:10, col=runif(10))
ggplot(mapping = aes(x = x, y, y)) +
geom_point(data = transform(testdata,
facet = factor("Top", c("Top", "Bottom"))),
aes(colour = col)) +
scale_colour_continuous(name = "Short") +
new_scale_colour() +
geom_point(data = transform(testdata,
facet = factor("Bottom", c("Top", "Bottom"))),
aes(colour = col)) +
scale_colour_continuous(name = "A rather longer name") +
facet_wrap(~ facet, ncol = 1)
使用plot_layout
你可以“收集”传说。这用作默认 theme(legend.position = 'right')
。您可以在 plot_layout 和 & theme(legend.position = 'right')
之后添加它,如果您想更改图例的位置,可以调整位置。
g1/g2 + plot_layout(guides = 'collect') # & theme(legend.position = 'right') <- adjust position here!
ggsave("testfile.tiff", units = "mm", device="tiff",
width=100, height=100, dpi = 100)
我正在使用包 patchwork
垂直组合多个 ggplot2
图。我希望每个图的比例都直接在另一个上方,而不管比例名称的长度如何。目前,比例尺并未相互对齐。
如果可以的话,我愿意使用 ggpubr
或 facet_grid()
,但我已经看到这些方面 doesn't allow multiple scales,但我还没有找到任何解决方案使用 ggpubr
library(ggplot2)
library(patchwork)
set.seed(0)
testdata <- data.frame(x=1:10, y=1:10, col=runif(10))
g1 <- ggplot(testdata, aes(x=x,y=y,col=col)) + geom_point() +
scale_color_gradient(name="Short")
g2 <- ggplot(testdata, aes(x=x,y=y,col=col)) + geom_point() +
scale_color_gradient(name="A rather longer name")
g1/g2
ggsave("testfile.tiff", units = "mm", device="tiff",
width=100, height=100, dpi = 100)
理想输出:
我也很想知道可以解决这个问题的拼凑参数,但我认为没有(如果我错了请纠正我)。您可能已经注意到 Hadley 的回答已有 10 多年历史,从那时起人们就一直在研究 ggplot2。 ggnewscale
包解决了每个图有多个比例的问题。这是使用多个色阶的多面方法:
library(ggplot2)
library(ggnewscale)
set.seed(0)
testdata <- data.frame(x=1:10, y=1:10, col=runif(10))
ggplot(mapping = aes(x = x, y, y)) +
geom_point(data = transform(testdata,
facet = factor("Top", c("Top", "Bottom"))),
aes(colour = col)) +
scale_colour_continuous(name = "Short") +
new_scale_colour() +
geom_point(data = transform(testdata,
facet = factor("Bottom", c("Top", "Bottom"))),
aes(colour = col)) +
scale_colour_continuous(name = "A rather longer name") +
facet_wrap(~ facet, ncol = 1)
使用plot_layout
你可以“收集”传说。这用作默认 theme(legend.position = 'right')
。您可以在 plot_layout 和 & theme(legend.position = 'right')
之后添加它,如果您想更改图例的位置,可以调整位置。
g1/g2 + plot_layout(guides = 'collect') # & theme(legend.position = 'right') <- adjust position here!
ggsave("testfile.tiff", units = "mm", device="tiff",
width=100, height=100, dpi = 100)