我的数据框all
看起来像这样:
现在我想创建一个散点图,其中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
这应该很容易,但我无法弄清楚如何。
此致
答案 0 :(得分:8)
如果您想使用Hadley的ggplot2
绘图,基本想法是获取表格的数据:
x y
col_names values
这可以通过使用Hadley的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))
如果你不想要颜色,那么只需删除geom_point中的aes(colour=variable)
,使其变为geom_point()
。
修改:我在这里可能会提到,您也可以将geom_point
替换为geom_jitter
,这样就可以给你带来喋喋不休的点数:
答案 1 :(得分:5)
以下两个选项需要考虑。第一个使用“lattice”包中的dotplot
:
library(lattice)
dotplot(values ~ ind, data = stack(all))
第二个使用基础R的“图形”选项中的dotchart
。要使用dotchart
功能,您需要将data.frame
包裹在as.matrix
中:
dotchart(as.matrix(all), labels = "")
请注意,此图中的点不“抖动”,而是按记录顺序显示。也就是说,最低点是第一个记录,最高点是最后一个记录。如果你放大了这个例子的情节,你会发现你有16条非常微弱的水平线。每行代表每列的一行。因此,如果您查看“STM_cold”或具有NA
值的任何其他变量的点,您会在顶部看到一些空白行,其中没有可用数据。
这有其优点,因为如果按时间顺序记录值,它可能会显示一段时间的趋势,但如果源数据框中的行太多,则可能也会有缺点。
答案 2 :(得分: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透明度对点进行操作并删除jitter
的示例,如下面与Ananda的评论所述。
invisible(
mapply(
points,
rep(seq_along(test),each=nrow(test)),
unlist(test),
col=rgb(0,0,0,0.1),
pch=15,
cex=3
)
)