可视化捕获数据的更好方法

时间:2013-06-24 21:15:11

标签: r ggplot2

不确定这是否超出Stack Overflow的范围。如果是的话,请告诉我。

我的输入data

我试图想象(或执行一些尚未确定的分析)在468个不同捕获会话期间捕获的个体的大小分布。捕获会话标记为“id”,我创建了一个新列“newID”,为简单起见,编号为1:468的会话(如果有人对代码感兴趣,我做了一个很好的循环来创建这个新列)。我正在绘制的尺寸在“SL”栏中。

我还有专栏指定“日期”,“年”,“月”,“位置”和“溪”,在此期间发生了给定的捕获会话。数据肯定可以分成更小的部分(例如,有4条小溪,所以我可以为每条小溪做一个单独的小区),但我不想走那条路,除非这是我唯一的选择。 / p>

到目前为止,我已经完成了一个简单的初步绘图,该绘图由“Year”(仅为了简单起见,因此数据不会过于紧密堆叠)与以下代码完成:

library(ggplot2)
CreekDat <-read.table("CreekData.txt",header=TRUE)
CreekData4<-data.frame(CreekDat)

DOT <-ggplot(CreekData4,aes(newID,SL,color=factor(newID)))
DOT<-DOT+facet_grid(Year~.)
DOT<-DOT+stat_boxplot(aes(x = newID,y=SL))
DOT

得到了这个结果http://ufsnook.smugmug.com/photos/i-psJZ6kw/0/X3/i-psJZ6kw-X3.jpg

我想要显示大小分布的~500个事件有点多...我想知道是否有人知道任何其他可能适用于此数据的绘图选项,有任何建议在箱形图中工作我是目前正在使用,或者对我可以看到的非视觉分析有任何想法。

1 个答案:

答案 0 :(得分:2)

这是一个有趣的。我最终将数据分箱并汇总。

require(ggplot2)

# read the file into a data frame
CreekData <-read.table("CreekData.txt",header=TRUE)

# fix the date
CreekData$Date <- as.POSIXct(paste(CreekData$Year,
                                   CreekData$Month,
                                   "1 12:00",
                                   sep = "-"),
                             format = "%y-%m-%d %H:%M",
                             tz = "GMT")
# bin the size
CreekData$SL.binned <- cut(CreekData$SL,
                           breaks = c(seq(0,500,50),1000),
                           labels = c(paste(seq(0,450,50),
                                            "-",
                                            seq(50,500,50)),
                                      ">500"),
                           right = FALSE,
                           ordered_result = TRUE)
# add something we can sum!
CreekData$SL.bin.count <- rep(1,length(CreekData$SL.binned))

# aggregate it
CreekDataAg <- aggregate(x = CreekData$SL.bin.count,
                         by = list("Date" = CreekData$Date,
                                   "Location" = CreekData$Location,
                                   "SL.binned" = CreekData$SL.binned),
                         FUN = sum)
names(CreekDataAg)[4] <- "Count"

# plot it
p <- ggplot(data = CreekDataAg,
            aes(x = Date,
                y = SL.binned)) +
  geom_tile(aes(fill = Count,
                color = Count),
            size = 0) +
  facet_wrap(~Location) +
  scale_fill_gradient(name = "Count",
                      low = "grey50",
                      high = "steelblue") +
  scale_color_gradient(low = "grey50",
                       high = "steelblue") +
  scale_y_discrete(drop=FALSE) +
  labs(title = expression(atop("Count by size interval",
                               atop(italic("something else")))),
       x = "Date",
       y = "Size range") +
  theme_bw(base_size = 8, base_family = "")
print(p)

然后你得到一个看起来像这样的情节:

enter image description here

需要一些工作来修复绘图中的颜色,但这不应该太难。

您还可以按ID进行分区,替换agrgegation中的Date并使用newID进行绘图。这让你......

enter image description here