首页 > 解决方案 > 将 r 中每个分组变量的数据框的所有列绘制到一个图上

问题描述

D 亲爱的,给定以下数据框,我正在尝试绘制每列的值并按类型(有三组,alpha,beta,gamma)标记整体(彩色)。

换句话说,x 轴应显示 9 个点 (x100,x110....,x180),y 轴范围应为 0 到 2(每列取一个最大值从 0 到 2 的值)。

结果三行中的每一行都应突出显示三个分类变量中的每一个。

对数据框的格式表示歉意,我还没有弄清楚如何漂亮地输出它。

structure(list(Group.1 = c("alpha", "beta", "gamma"), x100 = 
c(1.31729175522923, 
0.985278656706214, 0.156200287397951), x110 = c(1.54471416538581, 
0.915659603197128, 0.733224726747721), x120 = c(1.27778739808127, 
0.813037838321179, 0.779596480540931), x130 = c(1.25000598328188, 
0.488610395696014, 0.806707685347646), x140 = c(1.82296009687707, 
1.16132276877761, 1.31973652262241), x150 = c(0.929914232343435, 
1.41477890312672, 1.41652730805799), x160 = c(1.19612871715799, 
0.801679770927876, 0.39746836386621), x170 = c(1.88860023999587, 
1.03295020200312, 0.729622524231672), x180 = c(0.926427994389087, 
1.20304362708703, 1.57529754098505)), row.names = c(NA, -3L), 
class = "data.frame")

我正在尝试使用 ggplot(任何其他绘图方法都可以),但是在阅读 ggplot 函数的要求时,我很难理解是否应该创建一个值向量以用作 aes 参数 y?

提前致谢,

F

标签: rggplot2

解决方案


要获得绘图所需的布局,您需要使用 pivot_longer 将 data.frame 转换为长格式。从那里你可以正常使用 ggplot 。要取消堆叠条形,请使用 position = dodge。

library(tidyverse)

data <- structure(list(Group.1 = c("alpha", "beta", "gamma"), 
               x100 = c(1.31729175522923, 0.985278656706214, 0.156200287397951), 
               x110 = c(1.54471416538581, 0.915659603197128, 0.733224726747721), 
               x120 = c(1.27778739808127, 0.813037838321179, 0.779596480540931), 
               x130 = c(1.25000598328188, 0.488610395696014, 0.806707685347646), 
               x140 = c(1.82296009687707, 1.16132276877761, 1.31973652262241), 
               x150 = c(0.929914232343435, 1.41477890312672, 1.41652730805799), 
               x160 = c(1.19612871715799, 0.801679770927876, 0.39746836386621), 
               x170 = c(1.88860023999587, 1.03295020200312, 0.729622524231672), 
               x180 = c(0.926427994389087, 1.20304362708703, 1.57529754098505)), 
          row.names = c(NA, -3L), 
          class = "data.frame")
data %>% 
  pivot_longer(cols = contains("x"),
               names_to = "data_points",
               values_to = "vals") %>% 
  ggplot(aes(x = data_points, y = vals, fill = Group.1)) +
  geom_col(position = "dodge")

reprex 包(v0.3.0)于 2020 年 11 月 11 日创建


推荐阅读