r - ggplot2 boxplot() 中的平线
问题描述
我正在尝试用 ggplot2 绘制一些分组的箱线图,但我遇到了麻烦,因为箱线图只是显示为平线。
数据框如下:
col1 col2 col1.1 col2.1 col1.2 col2.2 group
a 0.1 ... G1
b 0.2 ... G1
c 0.3 .... G2
d 0.3 .... G2
e 0.1 ... G3
f 0.1 ... G3
g 0.1 ... G3
列名:col1、col1.1、col1.2、col2、col2.1、col2.2 行名:a,b,c,d,e,f,g 组列表示每一行所属的组至。
我希望能够分离出每个组,并为每种类型的列绘制箱线图。即,我会将所有 col1、col1.1 和 col1.2 转换为“col1”并为该组绘制箱线图,与 col2 类似。
我的代码如下:
G1 = df[df$group == "G1",]
G1 = G1[,-7]
p = G1[gtools::mixedsort(rownames(G1)),]
p$name = rownames(p)
p = reshape2::melt(p, id.vars="name")
colnames(p) <-c("name","group","values")
p$group = gsub("\\..*", "" , p$group)
p$group = factor(p$group, levels = c("col1","col2"))
plt1 = ggplot(p, aes(x = factor(group), y = values, fill = name)) + geom_boxplot() + scale_fill_brewer(palette="Set3") + xlab("group") + ylab("Values")
但是,使用此代码,我的箱线图中出现了平线。如果您能发现我的错误,请帮助我。
提前致谢!
解决方案
你可以试试这个——
library(tidyverse)
df %>%
pivot_longer(cols = -group,
names_to = '.value',
names_pattern = '(col\\d+)') %>%
pivot_longer(cols = -group) %>%
ggplot(aes(x = factor(group), y = value, fill = name)) +
geom_boxplot() +
scale_fill_brewer(palette="Set3") +
xlab("group") + ylab("Values")
可重现的数据 -
set.seed(123)
df <- data.frame(col1 = rnorm(7), col2 = runif(7), col1.1 = rnorm(7),
col2.1 = rnorm(7), col1.2 = runif(7), col2.2 = rnorm(7),
group = c('G1', 'G1', 'G2', 'G2', 'G3', 'G3', 'G3'))
推荐阅读
- java - 有资源泄漏警告,但我似乎无法关闭它
- flutter - Flutter 中的命名路由和导航屏幕有什么不同?
- reporting-services - 在 SSRS 报告的矩阵表中按顺序设置行号
- postgresql - 为什么在 postgres 中默认索引在 b 树而不是 B+ 树上
- css - Clip path SVG not scaling in Firefox - working in other browsers
- permissions - 服务器已拒绝 Active Directory 中的客户端凭据
- html - 当 JSON 数据中存在特定数据时,显示一段 HTML 代码
- javascript - 如何使用javascript以随机顺序显示文件夹中的图像?
- android - 是否可以从位图创建 android.media.image 实例?
- c++ - 具有更多参数的信号处理程序