2016-08-17 126 views
-1
> aggregate(dat[, 3:7], by=list(dat$TRT), FUN=mean) 
    Group.1 DBP1 DBP2 DBP3 DBP4 DBP5 
1  A 116.55 113.5 110.70 106.25 101.35 
2  B 116.75 115.2 114.05 112.45 111.95 

我想创建一个行情节进行的X轴的namesDBP1DBP2,...,DBP5)。如何使用R绘制这些数据?

它需要在Excel(我承认)两秒钟,正好给了我想要的: enter image description here

需要明确的是,这个问题是关于获取数据的两行成积,不是他们是如何显示(即用什么线/点/颜色组合)。

+0

不完全是,例子都仅包含一行数据,这是我专门在我的问题添加 – TMOTTM

+1

您可以添加另一个命令'lines()'的图层 –

+1

http://www.statmethods.net/graphs/index。html – Tim

回答

3

随着dplyrtidyrggplot2

数据

zz <- "Group.1 DBP1 DBP2 DBP3 DBP4 DBP5 
A 116.55 113.5 110.70 106.25 101.35 
B 116.75 115.2 114.05 112.45 111.95" 

df <- read.table(text = zz, header = TRUE) 

加载必需的软件包

library(dplyr) 
library(tidyr) 
library(ggplot2) 

整洁

df_tidy <- df %>% 
    gather(key, value, -Group.1) 

剧情

ggplot(data = df_tidy, aes(x = key, y = value)) + 
    geom_line(aes(color = Group.1)) + 
    ylim(90, 120) 

输出

enter image description here

+2

'group = Group.1' is不必要; “colour”规范会自动设置分组,颜色映射使用因子变量。 –

+0

TIL。改变反映。 – emehex

+0

不,你应该离开'color = Group.1'并放弃'group = Group.1'(除非你想让两条线是相同的颜色......) –

-2

一个简单的方法是自定义您的情节,一步一步。

首先,绘制第一行并指定不要在绘制x轴时绘制。添加第二行。 将您的自定义x轴添加您想要的标签。 在刚绘制的值上添加点。

翻译成R

data <- matrix(c(116.55,113.5,110.7,106.25,101.35,116.75,115.2,114.05,112.45,111.95), nrow=2) 

plot(data[1,], type="l", xaxt="n") 
axis(1, at=1:5, labels=c("DBP1","DBP2","DBP3","DBP4","DBP5")) 
lines(data[2,]) 
points(data[1,]) 
points(data[2,]) 

xaxt="n"指定要无x轴的文字。

这里是一个很好的参考:http://www.statmethods.net/advgraphs/axes.html

enter image description here

然后,让它漂亮!

如果你想对未来的更简单的方法,这里是一个基本的功能,您可以改善

plot.Custom <- function(yy, xLabels, ...){ 
    plot(yy[1,], type="l", xaxt="n", ...) 
    axis(1, at=1:dim(yy)[2], labels=xLabels) 
    for(i in 1:dim(yy)[1]){ 
     lines(yy[i,]) 
     points(yy[i,]) 
    } 
} 
plot.Custom(data, c("DBP1","DBP2","DBP3","DBP4","DBP5")) 
+0

我真的很少在x轴上使用因子(x)挣扎,它不允许我做适当的线条。你的解决方案非常棒! –

+0

我不敢相信有没有更简单的方法来做到这一点,因为这是一个普遍的任务。 – TMOTTM

+1

@TMOTTM有。在调用plot中,设置'type ='b''。或者只是阅读文档。 – Sycorax

1

第一步:使用meltreshape2包:

d <- aggregate(
       dat[, 3:7], 
       by=list(dat$TRT), 
       FUN=mean 
    ) 
m <- melt(d 
    id="TRT", 
    measure.vars=c("DBP1","DBP2","DBP3","DBP4","DBP5") 
) 

然后使用

xyplot(m$value~m$variable, type="o", group=m$TRT, auto.key=list(TRUE)) 

enter image description here

+0

不认为你需要'measure.vars'在这里... –

1

尽可能简单的(?)基-R答案:

dd <- read.table(header=TRUE,text=" 
     Group.1 DBP1 DBP2 DBP3 DBP4 DBP5 
     A 116.55 113.5 110.70 106.25 101.35 
     B 116.75 115.2 114.05 112.45 111.95") 

matplot()是绘制多个并行序列的基本函数,但是(1)它要求该序列在的矩阵中; (2)它不能处理字符变量,所以你必须删除第一列; (3)如果您想将组名作为轴标签,则必须使用单独的axis()命令添加该组名。不幸的是,它不是(我所知道的)可能只抑制一个轴,所以你必须抑制它们(axes=FALSE),然后手动添加它们。

par(las=1) ## horizontal y-axis labels (cosmetic) 
matplot(t(dd[,-1]),type="b",axes=FALSE, 
     ylab="",ylim=c(90,120), 
     col=c("red","blue"),pch=16,lty=1) 
axis(side=2)       ## y-axis (default labels) 
axis(side=1,at=1:5,label=names(dd)[-1]) ## x-axis 
box()         ## bounding box 
legend("bottomleft",legend=dd$Group.1, 
     col=c("red","blue"),lty=1,pch=16) 

enter image description here

如果你想与传奇,漂亮的勾号标记等来分配,那么就matplot(t(dd[,-1]),...)将做到这一点。

+0

好吧,我不喜欢它的唯一的东西是你用字符串indeces覆盖轴indeces。 – TMOTTM

+0

你能澄清吗?我以为这就是你想要的。还是你不满意,它必须手动完成? –

0

一个简单的R代码里面可以是:

A <- c(116.55, 113.5, 110.70, 106.25, 101.35) 
B <- c(116.75, 115.2, 114.05, 112.45, 111.95) 

plot(A, type="n") 
axis(1, at=1:5, labels=c("DBP1","DBP2","DBP3","DBP4","DBP5")) 
lines(A, col="blue") 
lines(B, col="red") 

另一种方法:

plot(A, type="l", col="blue") 
axis(1, at=1:5, labels=c("DBP1","DBP2","DBP3","DBP4","DBP5")) 
lines(B, col="red")