如何绘制连接两个测量时间点的图?
这是我在这里的第一个问题!
我有两列数据,每一行都是一对值。我想把第一列和第二列垂直绘制,并且用线把每一对值连接起来,效果看起来像下面链接中的这个图:
http://www.sciencedirect.com/science/article/pii/S0300957297000440#gr1

如果你知道怎么做,无论是用R、Python、Perl还是Excel,请告诉我!
5 个回答
6
这里有一个用Python写的非常基础的示例:
import pylab as pl
data = pl.array([[1,2],[2,3],[1,3],[2,1],[5,3],[3,2],[3,2],[1,1]])
first = data[:,0]
second = data[:,1]
xs = []
ys = []
for r in data:
ys += list(r)
ys.append(None)
xs += [1.3,1.7]
xs.append(None)
pl.plot([1.3]*len(first),first,'o',[1.7]*len(second),second,'o',xs,ys)
pl.boxplot(data)
pl.ylim([min(min(first),min(second))-.5,max(max(first),max(second))+.5])
labels = ("first", "second")
pl.xticks([1,2],labels)
pl.show()
运行后会得到这样的结果:

6
这里有一个使用R语言和ggplot2库的方法,虽然有点简单粗暴:
library(ggplot2)
df <- data.frame(baseline=c(1,1,2,2,3,3,4,5,6,7,8,9,10,11),
sixmos =c(5,6,5,7,8,9,10,12,12,2,1,5,2,3))
data <- data.frame(group = factor(1:nrow(df)),
cat=c(rep('baseline',nrow(df)),
rep('sixmos',nrow(df))),
values=c(df$baseline,df$sixmos))
ggplot(data, aes(x=cat, y=values)) +
geom_line(aes(group=group)) +
geom_point(aes(group=group)) +
geom_boxplot(data=df, aes(x='baselin', y=baseline)) +
geom_boxplot(data=df, aes(x='sixmos2', y=sixmos))
你还可以看看这个回答: 按组绘制线图
6
还有另一种用 R
的方法,使用了 matpoints
和 matlines
(还有 boxplot
)
dd <- data.frame(x=rnorm(15), y= rnorm(15))
boxplot(dd, boxwex = 0.3)
# note that you need to transpose `dd`
matpoints(y= t(dd), x= c(1.17,1.83),pch=19, col='black')
matlines(y= t(dd), x= c(1.2,1.8), lty=1, col = 'black')