如何在具有分类x变量和数量y变量的情况下使用+ geom_line()?

4
我如何使用ggplot2创建一条线图,其中x变量可以是分类或因子,y变量是数字,组变量是分类?我已经尝试了只使用上述变量的+geom_point()方法,它有效,但是+geom_line()方法不起作用。
我已经查看了以下帖子: 使用分类数据创建线图具有两个分类变量的ggplot2条形图尽管+geom_line()没有线的绘图图表, 但都没有回答我的问题。
在进入代码和示例之前,(1)是的,我必须将x变量和组变量设置为字符或因子,(2)不,我不想要条形图或仅geom_point()。
下面的示例提供了使用不同变量对因变量运行的三个不同回归的多个自变量系数。虽然下面的代码展示了我想出来的解决方法(即创建一个名为“test”的int变量来代替包含回归中自变量名称的chr变量),但我需要保留自变量的chr名称。
library(dplyr)
library(ggplot2)
library(plotly)
library(tidyr)

var_names <- c("ST1", "ST2", "ST3", 
               "EFI1", "EFI2", "EFI3", "EFI4", 
               "EFI5", "EFI6")

####Dataset1####
reg <- c(26441.84, 20516.03, 12936.79, 17793.22, 18837.48, 15704.31, 17611.14, 17360.59, 14836.34)
r_adj <- c(30473.17, 35221.43, 29875.98, 30267.31, 29765.9, 30322.86, 31535.66, 30955.29, 29828.3)
a_adj <- c(19588.63, 31163.79, 22498.53, 27713.72, 25703.89, 28565.34, 29853.22, 29088.25, 25213.02)

df1 <- data.frame(var_names, reg, r_adj, a_adj, stringsAsFactors = FALSE)
df1$test <- c(1:9)

df2 <- gather(df1, key = "series_type", value = "value", c(2:4))

fig7 <- ggplot(df2, aes(x = test, y = value, color = series_type)) + geom_line() + geom_point()
fig7

最终我希望得到类似下面的图,但是独立变量名称应替换为“test”变量。

示例图


对于 aes() 中的 x,您想要 x = factor(test) - jazzurro
事实证明,x变量是因子还是字符并不重要(我已经尝试过两种方式都没有成功)。重要的是确保在aes()中包含'group = series_type'参数。我原以为color = series_type就足够了,但你必须包括group = series_type才能使geom_line()正常工作。 - pseudorandom
1个回答

7
你可以将 var_names 转换为因子,并按照出现顺序设置级别(否则会按字母数字顺序分配,并且x轴会混乱)。然后只需在绘图中的组参数中添加 series_type
df2 <- gather(df1, key = "series_type", value = "value", c(2:4)) %>%
  mutate(var_names = factor(var_names, levels = unique(var_names)))

ggplot(df2, aes(x = var_names, y = value, color = series_type, group = series_type)) + geom_line() + geom_point()

enter image description here


1
事实证明,我缺少的部分是将“group = series_type”添加到ggplot()的aes()中。无论x变量是chr还是factor,添加group参数都可以起作用。 - pseudorandom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接