如何用R中的vioplot绘制分类数据和数值数据?

时间:2015-02-27 03:36:11

标签: r boxplot categorical-data

我有一个带有分类列"颜色"的数据集,它有4种颜色。另外两列中的一列是定量的,被称为"花粉"。我试图让vioplot制作4个独立的小提琴图颜色与花粉。这是一个数据样本

enter image description here

数据位于http://www.uwyo.edu/crawford/datasets/beeflowers.txt

我用

制作了4个数据子集
blue <- subset(beeflowers4, colors=="blue", select=c(pollen, colors))
green <- subset(beeflowers4, colors=="green", select=c(pollen, colors))
purple <- subset(beeflowers4, colors=="pruple", select=c(pollen, colors))
red <- subset(beeflowers4, colors=="red", select=c(pollen, colors))
然后我尝试用

绘制小提琴情节
vioplot(blue, green, purple, red, names=c("blue", "green", "purple", "red"), col="yellow")

但是我收到了这个错误

#Error in FUN(X[[1L]], ...) : 
#  only defined on a data frame with all numeric variables

无论如何,vioplot是否可以绘制花粉与颜色?

2 个答案:

答案 0 :(得分:2)

这是另一种重复性较低的方式。当你发现自己一遍又一遍地输入同样的东西时,就像那四行子集一样,这表明这是一种更有效的方式。

在这种情况下,ggplot会以您已有的长格式获取数据,因此无需进行任何子设置或重新整形。

# import data
x <- read.table("http://www.uwyo.edu/crawford/datasets/beeflowers.txt", 
                stringsAsFactors = FALSE,
                header = TRUE)

# inspect
str(x); View(x)

# get rid of that 999, presumably missing data
x <- x[x$pollen != 999, ]

# plot
library(ggplot2)
ggplot(x, aes(colors, pollen)) +
  geom_violin()

enter image description here

答案 1 :(得分:0)

当您进行子集化时,您拼错了“紫色”。此外,在vioplot函数中,前四个参数需要是向量,而不是数据帧。这段代码应该有用。

blue <- subset(beeflowers4, colors=="blue", select=c(pollen, colors))

green <- subset(beeflowers4, colors=="green", select=c(pollen, colors))

purple <- subset(beeflowers4, colors=="purple", select=c(pollen, colors))

red <- subset(beeflowers4, colors=="red", select=c(pollen, colors))

vioplot(blue$pollen, green$pollen, purple$pollen, red$pollen, names=c("blue", "green", "purple", "red"), col="yellow")