防止ggplot平滑整个数据系列?

时间:2014-09-09 13:54:17

标签: r ggplot2

我有一些荧光光谱数据在我的ggplot图表上具有相当“尖锐”和难以可视化的线条。我已经决定使用ggplot的平滑功能可以很好地整理我的数据,但它已经停止了我的数据全部来自纵坐标上的相同点(因此看起来有点奇怪)。

2个地块之前和之后都在这里:

Natural data

Smoothed data

我主要受到青色线的困扰,(我怀疑它是一个实验性的异常值),尽管理想情况下它们都需要像第一张图像那样起源。

特别是,我的问题是,我可以强制ggplot的平滑功能忽略,例如,前10个数据点吗?或者同样有效的替代方法是强制ggplot从我指定的纵坐标值中取出平滑线?

如果有人认为他们有一个比上述任何一个更优雅的解决方案我都是耳朵。

MWE:

# Define easy y value handles for plotting.
# Controls:
Con1 = WT.MeOH
Con2 = Adj..WT.Tunicamycin
Con3 = Adj..F288W.Tunicamycin
# Epeptides:
Epep37 = Adj..Epep.37ug.Avg
Epep62 = Adj..Epep.62ug.Avg
Epep83 = Adj..Epep.83ug.Avg
# RWGLW Pentapeptides:
PP166 = Adj..RWGLW.166ug.Avg
PP416 = Adj..RWGLW.416ug.Avg
PP624 = Adj..RWGLW.624ug.Avg
# GW-Octanol Dipeptides:
DP83 = Adj..GW.Oct.83ug.Avg
DP166 = Adj..GW.Oct.166ug.Avg
DP416 = Adj..GW.Oct.416ug.Avg

# Defining dataframes
fludata <- data.frame(Secs, Con1, Con2, Con3, Epep37, 
                  Epep62, Epep83, PP166, PP416, PP624,
                  DP83, DP166, DP416)

# Each of the following corresponds to a data series in my fluorimetry dataset. 
# The string in the colour field is for ease of generating the legend.
s <- ggplot(fludata, aes(Secs))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=Con1, colour="WT MeOH PTC"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=Con2, colour="WT Tunicamycin [83] NTC"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=Con3, colour="F288W Tunicamycin [83] NTC"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=Epep37, colour="F288W E-peptide [37]"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=Epep62, colour="F288W E-peptide [62]"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=Epep83, colour="F288W E-peptide [83]"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=PP166, colour="F288W RWGLW [166]"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=PP416, colour="F288W RWGLW [416]"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=PP624, colour="F288W RWGLW [624]"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=DP83, colour="F288W GW-Oct [83]"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=DP166, colour="F288W GW-Oct [166]"))
s <- s  + geom_smooth(data=fludata[11:nrow(fludata),], aes(y=DP416, colour="F288W GW-Oct [416]"))
# Axis labels
s <- s + ylab("Intensity") + xlab("Time (seconds)")
# Legend options
s <- s + theme(legend.position=c(.15,0.85), legend.title=element_blank()) 

上面的代码将生成一个图表,但不会省略前10个数据点。

@Ben Bolker,我还没有在这里展示你的代码,因为我还没有测试过它。

由于我以前没有真正为R做过这个,我能想到的最简单的选择是提供我的可下载的csv:

我重新定义了一些命名不佳的数据系列,所以我更新了MWE。

https://drive.google.com/file/d/0Bz_H3y-7pX9FcHNSZUZWeVRuVnc/edit?usp=sharing

不要再提供更多细节了!

1 个答案:

答案 0 :(得分:1)

  

我可以强制ggplot的平滑功能忽略,例如,前10个数据点

不确定。如果数据位于your_df

ggplot() + 
  # plot geom_smooth for just the 11th data point onward
  geom_smooth(data=your_df[11:nrow(your_df),], aes(...)) +

  # optionally, plot the jagged series for first ten lines
  geom_line(data=your_df[1:10,], aes(...))