我以范围的形式进行观察 例如:A 13-20,B 15-30,C 23-40,D 2-11 我想在R中以起始值和结束值的形式绘制它们,例如。 A和13(如果你说的话,可以说是上限和下限),以便可视化并找出某些观察组合的共同范围。在R中有快速的方法吗?我认为这是一个非常微不足道的问题,但我现在无法想到要做到这一点。
答案 0 :(得分:5)
以下是使用ggplot
的解决方案。目前尚不清楚您的数据采用何种格式,因此假设数据框包含id
列(A-D),min
和max
。
df <- data.frame(id=LETTERS[1:4], min=c(13,15,23,2), max=c(20,30,40,11))
library(ggplot2)
ggplot(df, aes(x=id))+
geom_linerange(aes(ymin=min,ymax=max),linetype=2,color="blue")+
geom_point(aes(y=min),size=3,color="red")+
geom_point(aes(y=max),size=3,color="red")+
theme_bw()
我添加了很多自定义功能,只是为了让您了解它是如何完成的。您可以使用aes(...)
函数告诉ggplot
df
中哪些列映射到图表的各种美学。因此,例如aes(x=id)
告诉ggplot
x轴的值可以在id
等的df
列中找到。
编辑:对OP评论的回应。
要更改轴文本的大小,请使用theme(...)
功能,如:
ggplot(df, aes(x=id))+
geom_linerange(aes(ymin=min,ymax=max),linetype=2,color="blue")+
geom_point(aes(y=min),size=3,color="red")+
geom_point(aes(y=max),size=3,color="red")+
theme_bw()+
theme(axis.text.x=element_text(size=15))
这里我把x轴文字做得更大了。与size=...
一起玩,以便按照您想要的方式进行操作。另请阅读文档(?theme
)以获取其他格式选项列表。
答案 1 :(得分:1)
目前尚不清楚数据集的范围列是string
还是'13-20'
,'15-30'
等,或者如果它是两个numeric
列,创建的例子。
matplot(m1, xaxt='n', pch=1, ylab='range')
axis(1, at=seq_len(nrow(m1)), labels=row.names(m1))
s1 <- seq_len(nrow(m1))
arrows(s1, m1[,1], s1, m1[,2], angle=90, length=0.1)
如果data
有string
列(d1
)
library(splitstackshape)
d2 <- setDF(cSplit(d1, 'range', '-'))
matplot(d2[,-1], xaxt='n', pch=1, ylab='range')
axis(1, at=seq_len(nrow(d2)), labels=d2$Col1)
arrows(s1, d2[,2], s1, d2[,3], angle=90, length=0.1)
m1 <- matrix(c(13,20, 15,30, 23,40, 2,11),
byrow=TRUE,dimnames=list(LETTERS[1:4],NULL), ncol=2)
d1 <- data.frame(Col1=LETTERS[1:4],
range=c('13-20', '15-30', '23-40', '2-11'), stringsAsFactors=FALSE)