1

如何显示使用马赛克包着色的点来绘制点图?

library(mosaic)
n=500
r =rnorm(n)
d = data.frame( x = sample(r ,n= 1,size = n, replace = TRUE), color = c(rep("red",n/2), rep("green",n/2)))
dotPlot(d$x,breaks = seq(min(d$x)-.1,max(d$x)+.1,.1))

现在所有的点都是蓝色的,但我希望它们根据数据表中的颜色列着色

4

2 回答 2

3

如果您仍然对mosaic/lattice解决方案而不是ggplot2解决方案感兴趣,那就去吧。

dotPlot( ~ x, data = d, width = 0.1, groups = color, 
  par.settings=list(superpose.symbol = list(pch = 16, col=c("green", "red"))))

结果图

另请注意

  • 与 一样ggplot2,颜色不是由color变量中的值决定的,而是由主题决定的。您可以使用par.settings在绘图级别上修改它或trellis.par.set()更改默认值。
  • 最好使用公式和data =避免$运算符。
  • 您可以使用该width参数,而不是breaks如果您想设置 bin 宽度。(如果这对您很重要,您可以使用该center参数来控制垃圾箱的中心。默认情况下,0 将是垃圾箱的中心。)
于 2016-01-15T04:24:39.353 回答
1

您需要添加stackgroups=TRUE以使两种不同的颜色不会相互叠加。

n=20
set.seed(15)
d = data.frame(x = sample(seq(1,10,1), n, replace = TRUE), 
               color = c(rep("red",n/2), rep("green",n/2)))
table(d$x[order(d$x)])
length(d$x[order(d$x)])
binwidth= 1

ggplot(d, aes(x = x)) + 
  geom_dotplot(breaks = seq(0.5,10.5,1), binwidth = binwidth, 
               method="histodot", aes(fill = color),
               stackgroups=TRUE) +
  scale_x_continuous(breaks=1:10)

此外,ggplot 使用其内部调色板进行填充美学。无论您将数据中“颜色”列的值称为什么,您都会得到相同的颜色。scale_fill_manual(values=c("green","red"))如果要手动设置颜色,请添加。

在此处输入图像描述

于 2015-09-01T22:21:57.960 回答