研究 - 从数据帧创建散点图(R - Creating Scatter Plot from Data

2019-07-20 15:06发布

我有一个数据帧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

这应该是容易的,但我无法弄清楚如何。

问候

Answer 1:

基本的想法,如果你想使用哈德利的绘制ggplot2是让你的表格的数据:

        x          y
col_names     values

而这可以通过使用来实现melt功能从哈德利的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这会给你,好了,抖动点:



Answer 2:

这里有两个问题需要考虑。 第一种使用dotplot从“格”套餐:

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

第二用途dotchart从基础R的“图形”选项。 要使用dotchart功能,你需要用你的data.frameas.matrix

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

注意,在这个图形中的点 “抖动”,而是在他们录制的顺序呈现。 也就是说,最低点是第一条记录,最高点是最后一个记录。 如果放大到剧情在这个例子中,你会看到你有16条非常模糊的水平线。 每条线代表从每一列中的一行。 因此,如果你看一下点了“STM_cold”或有其他变量的NA值,你会看到在那里有没有可用数据前几个空行。

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



Answer 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 ING以便它们不在彼此的顶部打印。

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

结果:

编辑

下面是使用上的点Alpha透明度和摆脱的一个例子jitter作为与阿难在下面的评论中讨论。

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



文章来源: R - Creating Scatter Plot from Data Frame