当我绘制以下示例时:
Participant <- c(1:12)
AnswersDay1 <- c(9,3,9,13,7,12,10,7,9,0,12,11)
Day1Group <- c(0,1,0,1, 0, 1, 0,1,0,1, 0, 1)
PushFrame <- data.frame(Participant, AnswersDay1, Day1Group)
plot(AnswersDay1, Day1Group)
该图仅显示十个点而不是data.frame中的12个值。我发现这是因为有三对具有完全相同的值。
是否有可能以某种方式在情节中说明这一点?也许当它们具有相同的值或类似的东西时使用更大的点?
答案 0 :(得分:6)
1)sunflowerplot 您可能更喜欢使用向日葵图,该向日葵图显示重复点作为单个点,每次出现一个辐条。不需要包裹。
sunflowerplot(AnswersDay1, Day1Group)
(图表后继续)
2)抖动另一种常见技术是使用稍微移动重复点的抖动。在这个例子中,我们抖动Y变量但是可以交替地抖动X变量或两者。不需要包裹。
set.seed(123) # set seed of random number generator for reproducibility
plot(AnswersDay1, jitter(Day1Group))
(图表后继续)
3)cex 如果您确实希望使用大小作为重复项数量的指标,则创建一个新数据框,其中包含每个点的重复数(在ag的Participant列中) )然后绘制如图所示。同样,不需要包。
ag <- aggregate(Participant ~., PushFrame, length)
plot(Day1Group ~ AnswersDay1, ag, cex = Participant, pch = 20)
答案 1 :(得分:4)
是的,绝对有办法:恰当地设置cex
:
plot(AnswersDay1, Day1Group, cex = point_size)
如何获得与每个条目相对应的磅值?好吧,你用table
计算它们:
tab = table(AnswersDay1, Day1Group)
这就是tab
的样子:
Day1Group
AnswersDay1 0 1
0 0 1
3 0 1
7 1 1
9 3 0
10 1 0
11 0 1
12 1 1
13 0 1
也就是说,对于AnswersDay1
中的每个数据点,它会告诉您该点出现的频率。现在,您只需使用AnswersDay1
和Day1Group
point_size = diag(tab[as.character(AnswersDay1), as.character(Day1Group)])
注意as.character
- 这是必要的,因为表中的名称是字符串,并且在这里使用数字索引将索引错误的元素。 diag
只返回结果矩阵的对角线,这就是我们在此之后所做的。
答案 2 :(得分:3)
你可以使用scales
包来改变你的点的透明度,然后重叠的点会更亮(不那么华丽):
library(scales)
plot(AnswersDay1, Day1Group, pch = 20, cex= 2, col = alpha('black', 0.35))
alpha
参数从1(无透明度)变为0(完全透明)。
答案 3 :(得分:1)
还有几种可能性:
@ KonradRudolph的解决方案已在plotrix::sizeplot()
中实施。
PushFrame <- data.frame(Participant=1:12,
AnswersDay1=c(9,3,9,13,7,12,10,7,9,0,12,11),
Day1Group=c(0,1,0,1, 0, 1, 0,1,0,1, 0, 1))
library(plotrix)
with(PushFrame,sizeplot(AnswersDay1,Day1Group))
在ggplot2
中,stat_sum()
自动计算重合值并相应地缩放尺寸......
library(ggplot2); theme_set(theme_bw())
ggplot(PushFrame,aes(AnswersDay1,Day1Group))+stat_sum()