【问题标题】:How to plot several box plots with different colours in one figure? [closed]如何在一张图中绘制多个不同颜色的箱线图? [关闭]
【发布时间】:2015-07-25 17:17:30
【问题描述】:

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

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

我想用不同颜色在一个图中绘制所有箱形图(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")

【问题讨论】:

  • 在什么意义上是题外话?诚然,这个问题有些模糊,但我能够产生预期的结果,这意味着理解 OP 想要什么是没有问题的。而且绝对不是调试问题。

标签: r visualization


【解决方案1】:

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

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

详情请参阅?boxplot

【讨论】:

  • 感谢您的评论,但上述解决方案似乎非常接近我的想法
【解决方案2】:

这是使用您的数据的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))

代码以分别读取标题和数字开始。然后通过将 Level 和大写字母中的“单词”(我后来称之为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")

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

【讨论】:

  • 非常感谢您的评论。但我无法在这里重现您的解决方案,这是我通过您的代码获得的 tinypic.com/view.php?pic=xg8iw&s=8#.VVRi-fmqpBc 我还想将年份改为 1 级、2 级和 3 级。我想将 2000 年、2001 年和 2002 年改为
  • 你没有得到和我一样的结果是因为你的水平不是他们应该的水平。您是否在 exactly 中阅读了您使用 exactly 我的代码发布的文件?我已根据您的评论更改了代码和图形。
  • 我发现了问题,当我向网站提交数据时,它改变了结构,请先用xls打开txt文件,它们应该像上面的例子一样,由18列值组成
  • 我看不出您发布的示例列与文本文件之间没有区别。如果有区别,你能告诉我在哪里。再说一遍:如何将数据读入 R?
  • 我使用的总代码,我贴在上面,这里是这个图中显示的问题tinypic.com/view.php?pic=2wqzck2&s=8#.VVSDQPmqpBc问题是它的绘图和你的不一样,图例显示了很多NA NA,颜色不同
猜你喜欢
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多