您可以在此处查看此数据的结构(在.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")
答案 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
所需。最后,我创建了一个level
和name
变量。
现在数据准备就绪,快速完成绘图:
library(ggplot2)
ggplot(plot.data,aes(x=name,y=value,fill=level)) + geom_boxplot() +
scale_fill_discrete(labels=2000:2002) + labs(fill="Year")
最后一行设置图例和图例标题中使用的标签。结果图是:
答案 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
了解详情。