首页 > 解决方案 > R改变路径geom_path在ggplot中通过

问题描述

我正在为我创建的情节而苦苦挣扎。y 轴按我想要的方式排序,但正如您所见,绘图线在 A1 和 B17 之间停止并连接顶部和底部点,我想改变这两个点(连接 A1和B17,停止顶部和底部连接)。

我在想有一种方法可以手动告诉 geom_path 连接什么而不连接什么,但我不知道该怎么做。

library("dplyr")
library("ggplot2")

v1 <- c(rep("a",27), rep("b",27), rep("c",27), rep("d",27), rep("e",27), rep("f",27), rep("g",27))
v2 <- rnorm(189)
v3 <- rep(c(18:27,1:17),7)
v4 <- rep(c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10",
      "B1","B2","B3","B4","B5","B6","B7","B8","B9","B10",
      "B11","B12","B13","B14","B15","B16","B17"),7)

df <- data.frame(v1,v2,v3,v4)

df %>% group_by(v2) %>%
  ggplot(aes(y = v3, x = v2, col = v1)) +
  geom_point() + geom_path() +
  scale_y_continuous(breaks=seq(1,27,1), labels=v4[c(11:27,1:10)])

阴谋

标签: rggplot2

解决方案


试试这个:

geom_path按照它们在数据中出现的顺序绘制点,因此需要根据您想要的顺序调整数据。

v1此示例通过使用因子将 y 值排序,然后通过排列变量和来排列数据框中的数据v4

用于set.seed使答案可重现。

library(dplyr)
library(ggplot2)

set.seed(123)

v1 <- c(rep("a",27), rep("b",27), rep("c",27), rep("d",27), rep("e",27), rep("f",27), rep("g",27))
v2 <- rnorm(189)
v3 <- rep(c(18:27,1:17),7)
v4 <- rep(c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10",
            "B1","B2","B3","B4","B5","B6","B7","B8","B9","B10",
            "B11","B12","B13","B14","B15","B16","B17"),7)

v4_order <- c(paste0("B", 1:17), paste0("A", 1:10))

df <- 
  data.frame(v1,v2,v3,v4) %>% 
  mutate(v4 = factor(v4, levels = v4_order)) %>% 
  arrange(v1, v4)

df %>%
  group_by(v2) %>%
  ggplot(aes(y = v3, x = v2, col = v1)) +
  geom_point() + 
  geom_path() +
  scale_y_continuous(breaks=seq(1,27,1), labels=v4[c(11:27,1:10)]) +
  theme_bw()

reprex 包于 2021-05-04 创建 (v2.0.0 )


推荐阅读