5

我有一个all看起来像这样的数据框:

http://pastebin.com/Xc1HEYyH

现在我想创建一个散点图,其中 x 轴上的列标题和相应的值作为数据点。例如:

7|                 x  
6|          x      x  
5|  x       x      x     x    
4|  x       x            x 
3|                             x      x  
2|                             x      x
1|
 ---------------------------------------
    STM    STM    STM   PIC   PIC    PIC
   cold   normal  hot  cold  normal  hot

这应该很容易,但我不知道怎么做。

问候

4

3 回答 3

8

如果您想使用 Hadley's 进行绘图,基本思想ggplot2是获取以下形式的数据:

        x          y
col_names     values

这可以通过使用meltHadley 的函数来完成reshape2。做?melt看看可能的论点。但是,在这里,由于我们想要融化整个 data.frame,我们只需要,

melt(all) 
# this gives the data in format:
#   variable value
# 1 STM_cold   6.0
# 2 STM_cold   6.0
# 3 STM_cold   5.9
# 4 STM_cold   6.1
# 5 STM_cold   5.5
# 6 STM_cold   5.6

在这里,x将是列variabley将是相应value的列。

require(ggplot2)
require(reshape2)
ggplot(data = melt(all), aes(x=variable, y=value)) + 
             geom_point(aes(colour=variable))

如果您不想要颜色,则只需删除aes(colour=variable)geom_point 内部,使其变为geom_point().

在此处输入图像描述

编辑:我可能应该在这里提一下,你也可以用那个来代替geom_pointgeom_jitter那会给你,嗯,紧张的点:

在此处输入图像描述

于 2013-02-27T10:37:08.267 回答
5

这里有两个可供考虑的选项。“lattice”包的第一个用途dotplot

library(lattice)
dotplot(values ~ ind, data = stack(all))

在此处输入图像描述

第二个使用dotchartbase R 的“图形”选项。要使用该dotchart功能,您需要将您的data.framein包装起来as.matrix

dotchart(as.matrix(all), labels = "")

请注意,此图形中的点不是“抖动”的,而是按照它们记录的顺序呈现的。也就是说,最低点是第一个记录,最高点是最后一个记录。如果您放大此示例的绘图,您会看到有 16 条非常微弱的水平线。每行代表每一列中的一行。因此,如果您查看“STM_cold”的点或任何其他具有NA值的变量,您会在顶部看到一些没有可用数据的空白行。

这有其优点,因为如果按时间顺序记录值,它可能会随着时间的推移显示趋势,但如果源数据框中的行太多,也可能是一个缺点。

在此处输入图像描述

于 2013-02-27T11:25:20.037 回答
3

使用基本 R 图形的手动版本只是为了好玩。

获取数据:

test <- read.table(text="STM_cold STM_normal STM_hot PIC_cold PIC_normal PIC_hot
6.0 6.6 6.3 0.9 1.9 3.2
6.0 6.6 6.5 1.0 2.0 3.2
5.9 6.7 6.5 0.3 1.8 3.2
6.1 6.8 6.6 0.2 1.8 3.8
5.5 6.7 6.2 0.5 1.9 3.3
5.6 6.5 6.5 0.2 1.9 3.5
5.4 6.8 6.5 0.2 1.8 3.7
5.3 6.5 6.2 0.2 2.0 3.5
5.3 6.7 6.5 0.1 1.7 3.6
5.7 6.7 6.5 0.3 1.7 3.6
NA  NA  NA  0.1 1.8 3.8
NA  NA  NA  0.2 2.1 4.1
NA  NA  NA  0.2 1.8 3.3
NA  NA  NA  0.8 1.7 3.5
NA  NA  NA  1.7 1.6 4.0
NA  NA  NA  0.1 1.7 3.7",header=TRUE)

设置基本情节:

plot(
     NA,
     ylim=c(0,max(test,na.rm=TRUE)+0.3),
     xlim=c(1-0.1,ncol(test)+0.1),
     xaxt="n",
     ann=FALSE,
     panel.first=grid()
     )

axis(1,at=seq_along(test),labels=names(test),lwd=0,lwd.ticks=1)

绘制一些点,并带有一些 x 轴jitter,因此它们不会相互打印。

invisible(
  mapply(
        points,
        jitter(rep(seq_along(test),each=nrow(test))),
        unlist(test),
        col=rep(seq_along(test),each=nrow(test)),
        pch=19
        )
)

结果:

在此处输入图像描述

编辑

这是一个在点上使用 alpha 透明度并摆脱jitterAnanda 的以下评论中讨论的示例。

invisible(
  mapply(
        points,
        rep(seq_along(test),each=nrow(test)),
        unlist(test),
        col=rgb(0,0,0,0.1),
        pch=15,
        cex=3
        )
)

在此处输入图像描述

于 2013-02-27T12:22:05.423 回答