You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:11:38