我的数据:
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”上色。
答案 0 :(得分:2)
这是将2个图和patchwork
粘贴在一起的一种方法,cowplot
与library(tidyverse)
library(patchwork)
lbl_int <- str_extract(labels, "^\\d+")
lbl_frac <- str_extract(labels, "\\(.+\\)")
类似,但具有更大的灵活性。我将标签分成2个向量,一个带有整数,一个带有括号的小数。然后绘制2个图,一个用于没有其他标记的外部标签,另一个用于主图。
经过一轮尝试构建后,我开始调整每个主题的边距,意识到我需要将顶部和底部边距设置为相同,但在左侧图的右侧和左侧均未设置边距右侧图的一侧,因此它们之间的空间很小。肯定还有调整的方法,但是我将从一些间距开始。
(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")))
主图非常简单,只需删除主题左侧的元素即可。
(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")))
外部标签的图删除了大多数主题元素,但具有y轴标题和标签。
patchwork
然后,+
可以轻松地将图添加在一起(实际上是与int_plot + main_plot +
plot_layout(ncol = 2, widths = c(1e-3, 1))
一起添加),然后设置宽度。同样,您可以根据需要进行调整,但是与右图相比,我使左图非常瘦。
var data = new FormData();
data.append('file', { uri: data.uri, name: 'picture.jpg', type: 'image/jpg' });
// Create the config object for the POST
const config = {
method: 'POST',
body: data
};
fetch('URL', config).then(responseData => {
// Log the response form the server // Here we get what we sent to Postman
back
console.log(responseData);
})
.catch(err => { console.log(err); });
由reprex package(v0.2.1)于2018-12-21创建
答案 1 :(得分:1)
这是可以帮助您前进的东西(我改编的this答案的信用)。
我们使用annotate
在两个不同的x轴坐标上绘制labels
,这将作为我们的标签(因此我们需要关闭theme
中的实际标签)。
首先,我们用不同的颜色创建两个我们想要的确切标签的向量。
dat <- data.frame(x = c(1,2,3,4,5,6), y = c(2,3,4,6,2,3))
breaks <- c(3,5)
labels_new1 <- c(NA, NA, 3, NA, 5, NA) # NA in order to skip that annotation
labels_new2 <- c(NA, NA, "(0.3)", NA, "(0.5)", NA)
重要部分:
coord_cartesian(xlim = c(0, 6), expand = FALSE) + # this will cut our plot properly
plot.margin = unit(c(1, 1, 1, 5), "lines") # this will give us some space on the left
请注意,在像这样定义的coord_cartesian
中,我们实际上是切断了两个注释(请注意,您在下一部分(-1,-0.5)中看到的两个x值不在xlim
之外范围)。
绘制对象:
g1 <- ggplot() +
geom_point(data = dat, aes(x = x, y = y)) +
annotate(geom = "text", y = seq_len(nrow(dat)), x = -1, label = labels_new1, size = 4) +
#first the number add color = "blue" for example
annotate(geom = "text", y = seq_len(nrow(dat)), x = -0.5, label = labels_new2, size = 4, color = "red") +
#second the parenthesis (colored in red)
coord_cartesian(xlim = c(0, 6), expand = FALSE) +
scale_y_continuous(breaks = breaks) +
#now lets shut off the labels and give us some left space in the plot
theme(plot.margin = unit(c(1, 1, 1, 5), "lines"),
axis.title.y = element_blank(),
axis.text.y = element_blank())
最后:
g2 <- ggplot_gtable(ggplot_build(g1)) # convert to grob
g2$layout$clip[g2$layout$name == "panel"] <- "off" # clipping of the axes
# this will show the two annotations that we left off before
grid::grid.draw(g2)
备注:
您可以使用x=-1
和x=-0.5
来移动两个注释,并使用c(1, 1, 1, 5)
中的最后一个值在左侧留出更多空间。
labels_new1
和labels_new2
非常重要,它们正在做您想展示某些东西的 和 where 的所有繁重工作。 / p>