r - 这个情节在R中可能吗?作为 geom col 或 bar 或其他东西
问题描述
我想在 R 中做这样的事情,如图所示。我试过 facet wrap,geom_col/bar。但是,如果我没记错的话,如果没有人不久前在 Rstudio 社区上发布的冗长代码,这似乎是不可能的。有什么想法吗?
以下是一些示例数据和代码:
149 Lab B NNK [ng/g] HKH 10448.00
14 Lab A DBAA [ng/g] HGT 0.00
642 Lab A HCHO [mug/g] SKH 8828.48
202 Lab B Be [ng/g] HMH 21.70
361 Lab B Ch3CH [mug/g] MGT 0.00
308 Lab B NPYR [ng/g] HPT 340.40
806 Lab A NDMA [ng/g] SPT 49.39
413 Lab A NAP [ng/g] MKH 0.00
526 Lab B Hg [ng/g] MMH 2.20
87 Lab A Cd [ng/g] HKH 273.00
80 Lab A AFB1 [ng/g] HKH 0.00
145 Lab B Ni [ng/g] HKH 5949.00
83 Lab A BAP [ng/g] HKH 38.71
332 Lab A IPYR [ng/g] MGT 26.53
36 Lab A NSAR [ng/g] HGT 566.64
680 Lab B EC [ng/g] SKH 0.00
2 Lab A AFB1 [ng/g] HGT 0.00
681 Lab B HCHO [mug/g] SKH 7.04
641 Lab A EC [ng/g] SKH 0.00
245 Lab A CH3CHO [mug/g] HPT 14045.95
132 Lab B di-CHO [ng/g] HKH 11360.00
846 Lab B NH3 [mug/g] SPT 952.00
551 Lab A BAP [ng/g] MPT 38.71
280 Lab B Be [ng/g] HPT 21.70
731 Lab A NIC [mug/g] SMH 720.00
225 Lab B NMOR [ng/g] HMH 0.00
604 Lab B Hg [ng/g] MPT 11.10
460 Lab B NNC [mug/g] MKH 22.00
222 Lab B NH3 [mug/g] HMH 1116.00
659 Lab A NPYR [ng/g] SKH 123.40
470 Lab A AFB1 [ng/g] MMH 0.00
523 Lab B Dry.M (%) MMH 6.40
52 Lab B Cr [ng/g] HGT 20438.00
701 Lab B pH [unit] SKH 1.04
538 Lab B NNC [mug/g] MMH 0.00
458 Lab B NIC [mug/g] MKH 5004.00
15 Lab A di-CHO [ng/g] HGT 3006.44
758 Lab B EC [ng/g] SMH 0.00
767 Lab B NDMA [ng/g] SMH 402.80
688 Lab B NDELA [ng/g] SKH 6.96
89 Lab A CH3CHO [mug/g] HKH 8052.61
694 Lab B NNC [mug/g] SKH 30.00
537 Lab B NMOR [ng/g] MMH 0.00
248 Lab A DBAA [ng/g] HPT 0.00
682 Lab B Hg [ng/g] SKH 0.50
683 Lab B IPYR [ng/g] SKH 30.83
167 Lab A CH3CHO [mug/g] HMH 7879.44
172 Lab A Dry.M (%) HMH 35.40
730 Lab A Ni [ng/g] SMH 12110.00
39 Lab A Se [ng/g] HGT 119.00
pvar2 <- ggplot(subset(labdata_snus_var), aes(x=Tobacco.Constituent, y=value)) +
geom_col(aes(fill = type), position = 'stack') +
facet_wrap(~Lab, nrow = 2) +
# ggplot(df) + geom_bar(aes(B, fill = C), position = 'stack', width = 0.9) +
# facet_wrap(~A, nrow = 1) + theme(panel.spacing = unit(0, "lines"))
# geom_linerange(aes(ymin=Avg-StDev, ymax=Avg+StDev), position = position_dodge(width = 0.4), width = 0.2, alpha = 0.4) +
# geom_point(aes(shape = type, stroke = 0.8), position = position_dodge(width = 0.4), size = 2, alpha = 0.7) +
# scale_shape_manual(name = "SLT Type", values = c(0, 1, 2, 3)) +
# scale_shape_manual(name = "SLT Type") +
#only 7 values withour snus
# # scale_shape_manual(name = "SLT Type", values=c(15,18,16,17,19)) +
# scale_color_manual(name = "SLT Type", values=c("#663300","#CC9900","#FF3399","#FF3300","#00CCCC","#6600CC","#CC6699", "#990033", "#999999", "#E69F00", "#56B4E9", "#009E73" )) + #only 7 values withour snus
# geom_text(aes(label= type), position = position_dodge(width = 0.5)) +
# facet_wrap(~Lab) +
# scale_y_sqrt(sec.axis = dup_axis()) +
# annotation_logticks(sides = "lr") +
theme_bw() +
# labs(color='type', size = 10) +
theme(axis.text.x = element_text(size = 8.5, angle = 45, hjust = 1, face="bold"),
axis.text.y = element_text(size=10, face="bold")) +
xlab("Chemical Constituent") + ylab("Variability with Maximum")
pvar2
没有注释的代码粘贴在下面。我需要做的是为实验室 A、实验室 B ......等等为整个数据堆叠列:
pvar2 <- ggplot(subset(labdata_snus_var), aes(x=Tobacco.Constituent, y=value)) +
geom_col(aes(fill = type), position = 'stack') +
facet_wrap(~Lab, nrow = 2) +
theme_bw() +
# labs(color='type', size = 10) +
theme(axis.text.x = element_text(size = 8.5, angle = 45, hjust = 1, face="bold"),
axis.text.y = element_text(size=10, face="bold")) +
xlab("Chemical Constituent") + ylab("Variability with Maximum")
pvar2
解决方案
这是一个开始:
labdata <- transform(labdata,
lab=gsub("Lab ","",lab),
constituent=trimws(constituent))
library(ggplot2)
library(colorspace)
theme_set(theme_bw()+theme(panel.spacing=grid::unit(0,"lines"),
legend.position="bottom"))
pvar2 <- ggplot(labdata, aes(x=lab, y=value)) +
geom_col(aes(fill = type), position = 'fill') +
facet_wrap(~constituent,nrow=1) +
scale_fill_qualitative_discrete()
print(pvar2)
我会考虑一些额外的调整:
- 修复 x 轴和 y 轴标签
- 用换行符替换成分中的空格(因此单位出现在条形标签的第二行)
- 删除从不 > 0 的成分
- 按合理(非字母)顺序排列成分和类型
- 考虑不同的配色方案
推荐阅读
- java - 没有容量限制的基于监视器的队列
- php - 当用户登录和用户注销时如何回显它?
- python - 如何手动检查屏幕上的行,在新列中添加值?
- python-3.x - 将 max_solutions 和 max_seconds 参数添加到 Python MIP 优化模型的方法是什么?
- c++ - CMake 在 Brew 上找不到 OpenSSL
- javascript - 从 API 获取数据后访问数组元素时显示未定义
- python - Selenium 将段落列表附加到单个变量
- c++ - VirtualAlloc 分配的内存和 std::vector 分配的内存有什么区别
- python - 使用python查找数据集中给定点的斜率
- flutter - 颤振拉起从 api 重新获取数据