繁体   English   中英

用 R 中的图替换条形图轴标签?

[英]Replace barplot axis labels with plots in R?

不久前我问了这个关于如何用单独的图替换条形图 x 轴标签的问题,我得到了答案。 但是,我又回来尝试再次执行此操作,只是这次我想翻转条形图。 我遇到的问题是我无法弄清楚如何调整先前答案中的代码以允许我翻转 plot。

例如,如果我创建一些数据和一个条形图,其中 x 轴标签替换为如下图:

df <- data.frame(vals = c(10, 5, 18),
                 name = c("A", "B", "C"))
bp <- df %>%
  ggplot() +
  geom_bar(aes(x = name, y = vals), stat = "identity") +
  xlab("") +
  theme_bw() +
  theme(axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank()) 

# create plots to use as x-axis --------------------------------------------

p1 <- ggplot(df, aes(x = vals, y = vals)) + geom_point() + theme_bw() +
  theme(axis.title.x = element_blank(),
        axis.text.x  = element_blank(),
        axis.ticks.x = element_blank(),
        axis.title.y = element_blank(),
        axis.text.y  = element_blank(),
        axis.ticks.y = element_blank()) 

p3 <- p2 <- p1

# turn into list of plots
myList <- list(p1, p2, p3)

# -------------------------------------------------------------------------

# attach plots to axis

width <- .9 # Default width of bars
p_axis <- ggplot(df) +
  geom_blank(aes(x = name)) +
  purrr::map2(myList, seq_along(myList), ~ annotation_custom(ggplotGrob(.x), xmin = .y - width / 2, xmax = .y + width / 2)) +
  theme_void()

bp / p_axis + plot_layout(heights = c(4, 1))

这创造了这个: 在 x 轴上绘制条形图

现在,如果我在创建条形图时添加行bp + coordflip()并继续使用代码的 rest,则条形图会翻转,但各个图仍保留在原位,如下所示: 翻转条形图

我猜我需要更改代码的p_axis部分以修复上面 plot 中显示的A, B, C的各个图……但我不确定到底要做什么才能解决这个问题? 我尝试过实验,但到目前为止没有成功。

我刚刚在annotation_custom中将xminxmamyminymax 另外,我将bp / p_axis部分更改为p_axis|bp

p_axis <- ggplot(df) +
  geom_blank(aes(y = name)) +
  purrr::map2(myList, seq_along(myList), ~ annotation_custom(ggplotGrob(.x), ymin = .y - width / 2, ymax = .y + width / 2)) +
  theme_void() 

p_axis|bp

需要对宽度进行一些微调。 这是它现在的样子。

例子

此时一个更简单的方法是使用ggExtra package,它有一个 function ggMarginal()将这些图添加到您选择的几何图形中。

有关演示,请参见https://geeksforgeeks.org/r-ggplot2-marginal-plots/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM