R 趋势图无法正确绘制

R 趋势图无法正确绘制,r,ggplot2,R,Ggplot2,我有以下数据集: Imputation Distance Clustering 2 3 4 5 Multiple GOWER PAM 1.6465 1.8604 1.9403 1.8752 Multiple GOWER DIANA 1.2760 1.9901 1.9834 1.9330 Multiple GOWER AGNES 2.0000 1

我有以下数据集:

Imputation  Distance    Clustering  2       3       4       5
Multiple    GOWER       PAM         1.6465  1.8604  1.9403  1.8752
Multiple    GOWER       DIANA       1.2760  1.9901  1.9834  1.9330
Multiple    GOWER       AGNES       2.0000  1.9739  1.9711  1.9613
Multiple    DEY         PAM         1.0161  0.7361  1.3657  1.2540
Multiple    DEY         DIANA       2.0000  2.0000  1.9279  1.9081
Multiple    DEY         AGNES       2.0000  2.0000  1.2890  1.2863
Single      GOWER       PAM         1.4669  1.6016  1.8037  1.9244
Single      GOWER       DIANA       1.3779  1.6891  1.6441  1.9429
Single      GOWER       AGNES       1.9630  1.9560  1.9907  1.9436
Single      DEY         PAM         1.0066  0.7093  0.7416  1.2659
Single      DEY         DIANA       1.0340  1.7889  1.7171  1.6917
Single      DEY         AGNES       2.0000  1.6093  1.6088  1.1616
None        GOWER       PAM         1.3351  1.7720  1.8558  1.9137
None        GOWER       DIANA       1.2963  1.9812  1.9420  1.9193
None        GOWER       AGNES       1.7059  1.9190  1.9411  1.9743
我想画一个图表,显示从2到5的值的趋势,以某种方式按分类变量分组

我已经尝试过融化数据集,因此:

molten_cvnn <- melt(cvnn_data, id = c("Imputation", "Distance", "Clustering"))
但我得到的是:

我想要这样的东西:

用不同的颜色、线型、形状等表示不同的类别组


谢谢你期待的帮助

我建议两种方法。您可以根据需要使用一行,但分组变量的数量相当大。作为第一个例子,我建议您使用矩阵样式的绘图来显示不同级别的线条

library(tidyverse)
#Code
df %>% pivot_longer(-c(Imputation,Distance,Clustering)) %>%
  mutate(name=gsub('X','',name)) %>%
  group_by(Imputation,Distance,Clustering) %>%
  dplyr::mutate(id=1:n()) %>%
  ggplot(aes(x=id,y=value,color=name,group=1))+
  geom_line()+
  facet_grid(Imputation~Distance+Clustering,scales = 'free')
输出:

第二个选项是使用条形图绘制距离,这样可以看到它们之间的差异

#Code 2
df %>% pivot_longer(-c(Imputation,Distance,Clustering)) %>%
  mutate(name=gsub('X','',name)) %>%
  group_by(Imputation,Distance,Clustering) %>%
  dplyr::mutate(id=1:n()) %>%
  ggplot(aes(x=id,y=value,fill=name))+
  geom_bar(stat = 'identity',color='black')+
  facet_grid(Imputation~Distance+Clustering,scales = 'free')
输出:

把它们作为你的选择

使用的一些数据:

#Data
df <- structure(list(Imputation = c("Multiple", "Multiple", "Multiple", 
"Multiple", "Multiple", "Multiple", "Single", "Single", "Single", 
"Single", "Single", "Single", "None", "None", "None"), Distance = c("GOWER", 
"GOWER", "GOWER", "DEY", "DEY", "DEY", "GOWER", "GOWER", "GOWER", 
"DEY", "DEY", "DEY", "GOWER", "GOWER", "GOWER"), Clustering = c("PAM", 
"DIANA", "AGNES", "PAM", "DIANA", "AGNES", "PAM", "DIANA", "AGNES", 
"PAM", "DIANA", "AGNES", "PAM", "DIANA", "AGNES"), X2 = c(1.6465, 
1.276, 2, 1.0161, 2, 2, 1.4669, 1.3779, 1.963, 1.0066, 1.034, 
2, 1.3351, 1.2963, 1.7059), X3 = c(1.8604, 1.9901, 1.9739, 0.7361, 
2, 2, 1.6016, 1.6891, 1.956, 0.7093, 1.7889, 1.6093, 1.772, 1.9812, 
1.919), X4 = c(1.9403, 1.9834, 1.9711, 1.3657, 1.9279, 1.289, 
1.8037, 1.6441, 1.9907, 0.7416, 1.7171, 1.6088, 1.8558, 1.942, 
1.9411), X5 = c(1.8752, 1.933, 1.9613, 1.254, 1.9081, 1.2863, 
1.9244, 1.9429, 1.9436, 1.2659, 1.6917, 1.1616, 1.9137, 1.9193, 
1.9743)), class = "data.frame", row.names = c(NA, -15L))
#数据

df根据OP的帖子,我们可以重塑为“长”格式,并创建绘图

library(dplyr)
library(tidyr)
library(ggplot2)
library(data.table)
cvnn_data %>% 
      pivot_longer(cols = `2`:`5`) %>% 
      mutate(rid = rowid(Imputation, name)) %>%
      ggplot(aes(rid, value, color = name)) + 
         geom_line()

或使用
ggpubr

library(ggpubr)
names(cvnn_data)[4:7] <- paste0("x", names(cvnn_data)[4:7])
lst1 <- ggline(cvnn_data,  "Imputation", c("x2", "x3", "x4", "x5"), color = "Distance")
lst1[[1]]
lst1[[2]]

在熔融数据中,
variable
是一个带有
X2..X5
的分类变量。这些不是数字,你希望它们是什么?它们应该是数字2到5吗?(无可否认,更改为数字并不会改变绘图。)也许你想要更长的透视图(cols=
2
5
)%%>%变异(rid=rowid(插补,名称))%%>%ggplot(aes(rid,值,颜色=名称))+geom\U line()
非常感谢,@r2evans。。。它们实际上是分类的,用于对值进行分组。@akrun,谢谢您的帮助!我已尝试应用您建议的代码,但不断出现错误
无法再找到函数pivot\u
。我已经尝试更新了
tidyverse
软件包,但仍然没有成功。非常感谢,Duck!这是,我相信,我能得到的最好的给我的许多类别,它的工作!我现在必须弄清楚如何让它在我的系统上工作,因为
R
系统找不到
pivot\u更长的
功能。尝试安装
tidyverse
,然后使用
库(tidyverse)
加载它@是或重新启动新的
R
新会话并加载
dplyr
tidyr
ggplot2
谢谢,@Duck!启动一个新的R会话并更新包就成功了!谢谢,@akrun!关于我的R studio为什么不再使用
pivot\u
功能,有什么想法吗?@ayePete你能检查一下你的
packageVersion('tidyr')
非常感谢!我现在已经能够更新包了。只需要重新启动RStudio。我喜欢
ggline
图形的外观,我能够通过稍微调整使信息更加清晰。再次感谢你对我在这里提出的所有其他问题的帮助。你真是救命恩人!
library(ggpubr)
names(cvnn_data)[4:7] <- paste0("x", names(cvnn_data)[4:7])
lst1 <- ggline(cvnn_data,  "Imputation", c("x2", "x3", "x4", "x5"), color = "Distance")
lst1[[1]]
lst1[[2]]
library(patchwork)
wrap_plots(lst1)