如何使用R绘制此数据?

时间:2016-08-17 19:42:36

标签: r data-visualization

> 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)。

在Excel中需要两秒钟(我承认)并准确提供我想要的内容: enter image description here

要清楚,问题是关于将两行数据放入绘图中,而不是如何显示它们(即使用什么线/点/颜色组合)。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

第一步:使用melt包中的reshape2

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

答案 2 :(得分:1)

最简单的可能(??)base-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]),...)即可。

答案 3 :(得分: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")

答案 4 :(得分:-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"))