如何使用箭头指示偏移 geom_text() 标签来绘制 geom_tile()?
How to plot geom_tile() with offset geom_text() labels indicated using arrows?
我可以通过 geom_text()
绘制带有标签的 geom_tile()
s,如下所示:
library(ggplot2)
df <- structure(list(x = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L,
3L, 4L, 5L, 6L, 7L, 8L),
y = c("A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B"),
z = c("stuff", "not_stuff", "not_stuff", "not_stuff", "not_stuff", "stuff",
"stuff", "not_stuff", "stuff", "stuff", "not_stuff", "stuff",
"stuff", "not_stuff", "stuff", "not_stuff")),
class = "data.frame",
row.names = c(NA,
-16L))
plt <- ggplot2::ggplot(data = df, mapping = ggplot2::aes(x = x, y = y, fill = z)) +
ggplot2::geom_tile(height = ifelse(z == "stuff", 0.4, 0.1)) +
ggplot2::geom_text(ggplot2::aes(label = ifelse(z == "stuff", z, "")))
plt
但我想让标签从图块本身偏移一个箭头(弯曲或其他方式),就像这样:
(为糟糕的绘图道歉。)我希望每个图块的标签都带有箭头,就像我在上图中描述的那个例子一样。
我不知道该怎么做,而且我真的无法在其他地方找到答案。
任何帮助 and/or 指点将不胜感激
ggrepel
包中的 geom_label_repel
适用于此:
library(ggplot2)
library(ggrepel)
ggplot(df, aes(x = x, y = y, fill = z)) +
geom_tile(height = ifelse(z == "stuff", 0.4, 0.1)) +
geom_label_repel(
aes(label = ifelse(z == "stuff", z, "")),
fill = NA,
nudge_y = 0.5
)
我可以通过 geom_text()
绘制带有标签的 geom_tile()
s,如下所示:
library(ggplot2)
df <- structure(list(x = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L,
3L, 4L, 5L, 6L, 7L, 8L),
y = c("A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B"),
z = c("stuff", "not_stuff", "not_stuff", "not_stuff", "not_stuff", "stuff",
"stuff", "not_stuff", "stuff", "stuff", "not_stuff", "stuff",
"stuff", "not_stuff", "stuff", "not_stuff")),
class = "data.frame",
row.names = c(NA,
-16L))
plt <- ggplot2::ggplot(data = df, mapping = ggplot2::aes(x = x, y = y, fill = z)) +
ggplot2::geom_tile(height = ifelse(z == "stuff", 0.4, 0.1)) +
ggplot2::geom_text(ggplot2::aes(label = ifelse(z == "stuff", z, "")))
plt
但我想让标签从图块本身偏移一个箭头(弯曲或其他方式),就像这样:
(为糟糕的绘图道歉。)我希望每个图块的标签都带有箭头,就像我在上图中描述的那个例子一样。
我不知道该怎么做,而且我真的无法在其他地方找到答案。
任何帮助 and/or 指点将不胜感激
ggrepel
包中的 geom_label_repel
适用于此:
library(ggplot2)
library(ggrepel)
ggplot(df, aes(x = x, y = y, fill = z)) +
geom_tile(height = ifelse(z == "stuff", 0.4, 0.1)) +
geom_label_repel(
aes(label = ifelse(z == "stuff", z, "")),
fill = NA,
nudge_y = 0.5
)