如何在一个图中绘制几个不同颜色的箱形图?

时间:2015-05-14 07:10:21

标签: r visualization

您可以在此处查看此数据的结构(在.txt文件中):https://gist.github.com/anonymous/b61a2f0fce0c079be31d

我有三个级别来自相同的测量。这重复10次。

我想在一个图中用不同颜色绘制所有箱形图(1级为1种颜色,2级为另一种颜色,3级为另一种颜色) 我已经研究了其他问题和答案,但找不到解决方案。

我使用的代码如下:

headers <- read.table("C:/Users/Desktop/example.txt",sep="\t",nrows=2,stringsAsFactors=FALSE)
data <- read.table("C:/Users/Desktop/example.txt",sep="\t",dec=",",skip=2)
names(data) <- paste(headers[1,],headers[2,],sep="/")
plot.data <- melt(data)
plot.data$level <- as.factor(gsub("(L|l)evel *([1-3])/[A-Z]*","\\2",plot.data$variable,))
plot.data$name <- as.factor(gsub("(L|l)evel *[1-3]/([A-Z]*)","\\2",plot.data$variable,))

library(ggplot2)
ggplot(plot.data,aes(x=name,y=value,fill=level)) + geom_boxplot()+
  scale_fill_discrete(labels=2008:2010)+labs(fill="Year")

2 个答案:

答案 0 :(得分:1)

以下是使用您的数据的ggplot2解决方案。面临的挑战是将数据转换为合适的格式,具体如下:

library(reshape2)
headers <- read.table("example.txt",sep="\t",nrows=2,stringsAsFactors=FALSE)
data <- read.table("example.txt",sep="\t",dec=",",skip=2)
names(data) <- paste(headers[1,],headers[2,],sep="/")
plot.data <- melt(data)
plot.data$level <- as.factor(gsub("(L|l)evel *([1-3])/[A-Z ]*","\\2",plot.data$variable))
plot.data$name <- as.factor(gsub("(L|l)evel *[1-3]/([A-Z ]*)","\\2",plot.data$variable))

代码首先分别读取标题和数字。然后通过将大写字母和“单词”组合成大写字母(稍后我称之为name)来标记列。然后使用melt命令(来自reshape2包)将数据转换为长格式,如ggplot所需。最后,我创建了一个levelname变量。

现在数据准备就绪,快速完成绘图:

library(ggplot2)
ggplot(plot.data,aes(x=name,y=value,fill=level)) + geom_boxplot() +
    scale_fill_discrete(labels=2000:2002) + labs(fill="Year")

最后一行设置图例和图例标题中使用的标签。结果图是:

enter image description here

答案 1 :(得分:0)

与R中的大多数操作一样,当颜色矢量比要着色的事物数量短时,颜色会被回收。试试这个:

df = data.frame(foo=rnorm(10),
                foo2=rnorm(10),
                bar=rnorm(10),
                bat2=rnorm(10))
boxplot(df,col = c('red','blue'))

请参阅?boxplot了解详情。