R语言ggplot绘制数据框多列散点图遇问题,求解决方法
问题描述
我有一个名为ptm的数据框,数据如下:
ptm <- read.csv('ptm.csv') ptm Method X1HSTB X1I6WA X1U19A X1YSAC X1YTBA X2CDSA X5O38A 1 Class weighted loss 0.37 0.83 0.44 0.49 0.76 0.64 0.68 2 OS 0.58 0.81 0.29 0.33 0.76 0.62 0.68 3 2 phase swapped OS 0.40 0.81 0.29 0.30 0.75 0.70 0.63 4 Thresholding 0.42 0.81 0.29 0.29 0.70 0.69 0.66 5 2 phase swapped US 0.43 0.80 0.27 0.29 0.71 0.66 0.54 6 US 0.35 0.77 0.27 0.53 0.70 0.26 0.69 7 Unbalanced 0.43 0.69 0.27 0.34 0.70 0.44 0.52 8 Control 0.75 0.87 0.80 0.61 0.82 0.84 0.83
我想绘制特定样式的散点图,尝试了以下代码:
ptm_plot <- ggplot(data=ptm, aes(x="1HSTB", "1I6WA", "1U19A", "1YSAC", "1YTBA","2CDSA", "5O38A", y=X1HSTB, X1I6WA, X1U19A, X1YSAC, X1YTBA, X2CDSA, X5O38A, colour=Method)) + geom_point(stat="identity") ptm_plot
结果只显示了部分列,无法达到预期效果,求解决方法。
解决方案
你的问题根源在于ggplot2要求数据为长格式(long format),而当前的ptm是宽格式(wide format)。需要先将数据转换为长格式,再绘图:
步骤1:加载所需包
# 如果未安装tidyr先执行安装:install.packages("tidyr") library(tidyr) library(ggplot2)
步骤2:转换数据格式
用pivot_longer将宽格式转长格式,把所有样本列(X1HSTB到X5O38A)拆分为Sample(样本名称)和Value(对应数值)两列,同时去掉样本名前的X:
ptm_long <- ptm %>% pivot_longer(cols = -Method, # 保留Method列,其余列转换 names_to = "Sample", values_to = "Value") %>% mutate(Sample = gsub("^X", "", Sample)) # 移除样本名前缀X
转换后的数据结构示例:
head(ptm_long) # A tibble: 6 × 3 Method Sample Value <chr> <chr> <dbl> 1 Class weighted loss 1HSTB 0.37 2 Class weighted loss 1I6WA 0.83 3 Class weighted loss 1U19A 0.44 4 Class weighted loss 1YSAC 0.49 5 Class weighted loss 1YTBA 0.76 6 Class weighted loss 2CDSA 0.64
步骤3:绘制散点图
用长格式数据绘图,即可显示所有样本列:
ptm_plot <- ggplot(data = ptm_long, aes(x = Sample, y = Value, colour = Method)) + geom_point(size = 3) + # 调整点大小匹配参考图 theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠 ptm_plot
关键说明
- 长格式数据让ggplot能够识别每个样本类别,并为每个Method绘制对应数值点,解决了原代码只显示部分列的问题。
- 旋转x轴标签是为了提升样本名称的可读性,和参考图布局一致。
内容的提问来源于stack exchange,提问作者Jessie Midgley
相关产品推荐
相关产品推荐

