我有一个数据帧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
这应该是容易的,但我无法弄清楚如何。
问候
基本的想法,如果你想使用哈德利的绘制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
将是然后列variable
和y
将对应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_point
与geom_jitter
这会给你,好了,抖动点:
这里有两个问题需要考虑。 第一种使用dotplot
从“格”套餐:
library(lattice)
dotplot(values ~ ind, data = stack(all))
第二用途dotchart
从基础R的“图形”选项。 要使用dotchart
功能,你需要用你的data.frame
在as.matrix
:
dotchart(as.matrix(all), labels = "")
注意,在这个图形中的点不 “抖动”,而是在他们录制的顺序呈现。 也就是说,最低点是第一条记录,最高点是最后一个记录。 如果放大到剧情在这个例子中,你会看到你有16条非常模糊的水平线。 每条线代表从每一列中的一行。 因此,如果你看一下点了“STM_cold”或有其他变量的NA
值,你会看到在那里有没有可用数据前几个空行。
这有它的优势,因为它可能会显示一个趋势随着时间的推移,如果数值按时间顺序记录下来,但也可能是一个缺点,如果有您的源数据帧太多行。
使用基础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
)
)