首页 > 解决方案 > 这个情节在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

这是我现在的输出: 在此处输入图像描述

标签: rggplot2

解决方案


这是一个开始:

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 的成分
  • 按合理(非字母)顺序排列成分和类型
  • 考虑不同的配色方案

在此处输入图像描述

在此处输入图像描述


推荐阅读