情节'范围'数据中的变量

时间:2014-11-29 18:40:08

标签: r plot range

我以范围的形式进行观察 例如:A 13-20,B 15-30,C 23-40,D 2-11 我想在R中以起始值和结束值的形式绘制它们,例如。 A和13(如果你说的话,可以说是上限和下限),以便可视化并找出某些观察组合的共同范围。在R中有快速的方法吗?我认为这是一个非常微不足道的问题,但我现在无法想到要做到这一点。

2 个答案:

答案 0 :(得分:5)

以下是使用ggplot的解决方案。目前尚不清楚您的数据采用何种格式,因此假设数据框包含id列(A-D),minmax

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)

enter image description here

如果datastring列(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)