我的数据:
dat <- data.frame(x = c(1,2,3,4,5,6), y = c(2,3,4,6,2,3))
我的情节的中断和标签:
breaks <- c(3,5)
labels <- c(paste(3,"(0.3)"), paste(5,"(0.5)"))
还有我的情节:
library(ggplot2)
ggplot() +
geom_point(data = dat, aes(x = x, y = y)) +
scale_y_continuous(breaks = breaks, labels = labels)
我想给相同的标签涂上不同的颜色。例如,我希望用与“(0.3)”不同的颜色为“3”着色。
最佳答案
这是一种使用 patchwork
将 2 个绘图粘贴在一起的方法,它是一个类似于 cowplot
的包,但具有更多的灵 active 。我将标签分成 2 个向量,一个是整数,一个是括号中的小数。然后制作 2 个图,一个用于没有其他标记的外部标签,一个用于主图。
在做了一轮尝试构建这个之后,我开始调整每个主题的边距,意识到我需要将顶部和底部边距设置为相同,但在左侧图的右侧和左侧没有留边距右图的一侧,所以它们之间的空间很小。当然还有一些方法可以调整它,但我会从一些间距开始。
library(tidyverse)
library(patchwork)
lbl_int <- str_extract(labels, "^\\d+")
lbl_frac <- str_extract(labels, "\\(.+\\)")
主要情节相当简单,只需删除主题左侧的元素即可。
(main_plot <- ggplot(dat, aes(x = x, y = y)) +
geom_point() +
scale_y_continuous(breaks = breaks, labels = lbl_frac) +
theme(axis.text.y.left = element_text(color = "gray"),
axis.title.y.left = element_blank(),
plot.margin = margin(1, 1, 1, 0, "mm")))
外部标签的绘图已删除大部分主题元素,但具有 y 轴标题和标签。
(int_plot <- ggplot(dat, aes(x = 0, y = y)) +
scale_y_continuous(breaks = breaks, labels = lbl_int) +
theme(axis.text.y.left = element_text(color = "black"),
axis.title.y.left = element_text(color = "black"),
axis.title.x = element_blank(),
panel.grid = element_blank(),
axis.ticks = element_blank(),
axis.text.x = element_blank(),
panel.background = element_blank(),
plot.margin = margin(1, 0, 1, 1, "mm")))
然后 patchwork
可以很容易地将绘图添加在一起——字面意思是使用 +
——然后设置宽度。同样,这里有一些您可以根据需要进行调整的内容,但与右侧相比,我将左侧的绘图做得非常非常瘦。
int_plot + main_plot +
plot_layout(ncol = 2, widths = c(1e-3, 1))
由 reprex package 创建于 2018-12-21 (v0.2.1)
关于r - 相同刻度/标签的几种颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53883348/