data.frame上的Facet_wrap看起来像融化的数据

时间:2018-10-18 12:16:55

标签: r ggplot2

我有一个数据集(A.plot),由于数据的缘故,看起来好像已经使用熔解器融化了。第1列是称为Prov的样本(9个样本名称各重复10次),第2列是step,称为Steg(1:10重复10次),第3:30列是不同的金属。样本和步骤本身不是唯一的,但是如果将它们连接在一起,则将获得真正的唯一样本名称。我创建了一个包含所有名为Element的金属名称的向量。

str(A.plot)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   99 obs. of  31 variables:
 $ Prov: chr  "A-HCl" "A-HCl" "A-HCl" "A-HCl" ...
 $ Steg: num  0 1 2 3 4 5 6 7 8 9 ...
 $ Li  : num  1.51 4.22 4.76 5.3 8.89 ...
 $ Be  : num  0.204 0.559 0.802 0.841 0.295 ...
 $ Na  : num  6097217 5991299 5819005 5921011 6042524 ...
 $ Mg  : num  405 22524 333229 553882 879715 ...
 $ Al  : num  446 459 525 508 503 ...
 $ K   : num  549282 505039 500718 515440 535693 ...

仅使用以下代码绘制一种金属:

A.test.plot <- A.plot[ , c( 1:2, 12) ] 
colnames(A.test.plot) <- c("Prov", "Steg", "value")

library(ggplot2)
library(tidyr)
ggplot(A.test.plot, aes(x=Steg, y=value, colour=Prov, group=Prov)) +
  geom_line()

我可以得到我希望每种金属如何显示的图:

Correct plot of one metal

问题是,我希望所有的金属都集中在facet_wrap中。我以前曾使用collect()来facet_wrap几种金属,但是每种金属(每个面板)只有一组数据/值。现在,我要在每个面板中输入几(9)组值,看来我以错误的方式输入了gather()

我尝试过:

A.test.plot1 <- A.plot 
colnames(A.test.plot1) <- c("Prov", "Steg", Element)

gather(A.test.plot1, key = Element, value, -"Steg", -"Prov")

ggplot(gather(A.test.plot1, key=Element, value="value", -"Steg", -"Prov"), aes(x=Steg, y=Element, colour=Prov, group=Prov) ) + 
  geom_point() + 
  facet_wrap(~ Element, scales = 'free') 

但是它似乎“聚集了很多”:

Failed facet_wrap

我还尝试了几种从收集函数和ggplot中删除Steg / Element / Prov的组合,但这只能使我离目标更远。

我缺少什么/做错了什么?

我看过this question,但是数据集已从链接中消失了,并且我不够熟练,无法为我的数据重现解决方案。我也看过another question,但我认为软件包lubridate在这里不适用。

编辑:根据要求提供示例数据:https://docs.google.com/document/d/1_d5xWdIdsH2nl-E_YggTSTON3swP0tSehurLQqtFrt8/edit?usp=sharing 请注意,由于有许多小数,因此它很大。

1 个答案:

答案 0 :(得分:1)

这对我有用:

library(ggplot2)
library(tidyr)
gather(A.test.plot1, key=Element, value="value", -"Steg", -"Prov") %>% 
  ggplot(aes(x=Steg, y=as.numeric(value), colour=Prov, group=Prov) ) + 
  geom_line() + 
  facet_wrap(~ Element, scales = 'free') 

enter image description here

问题在于调用y=Element时的规范aes()