R 按数字对系数变量重新排序时出现问题
数据:这是按鲨鱼种类分类的鲨鱼事件。这实际上是一个真实的数据集,已经总结过了R 按数字对系数变量重新排序时出现问题,r,ggplot2,R,Ggplot2,数据:这是按鲨鱼种类分类的鲨鱼事件。这实际上是一个真实的数据集,已经总结过了 require(ggplot2) 通过一个数字对因子变量重新排序,生成一个新变量 head(D) # FL_FATAL spec N Especies # 1 NO FATAL white 368 white # 2 NO FATAL tiger 169 tiger # 3 NO FATAL bull 120 bull # 4
require(ggplot2)
通过一个数字对因子变量重新排序,生成一个新变量
head(D)
# FL_FATAL spec N Especies
# 1 NO FATAL white 368 white
# 2 NO FATAL tiger 169 tiger
# 3 NO FATAL bull 120 bull
# 4 FATAL white 107 white
# 5 NO FATAL unconfired 78 unconfired
# 6 NO FATAL nurse 77 nurse
使用
reorder()。你们大多数物种都有一个N
值(仅限无致命值),但也有少数物种同时有致命值和无致命值。每当有两个以上的数值行对应一个系数时,reorder
使用这些数值的函数进行最终排序。默认函数是mean
,但您可能希望sum
按事件总数排序
# Using reorder isn't working or am i missing something?
ggplot(D, aes(x=N, y=reorder(D$spec, D$N))) +
geom_point(aes(size = N, color = FL_FATAL))
# adding facets makes it worse
ggplot(D, aes(x=N, y=reorder(D$spec, D$N))) +
geom_point(aes(size = N, color = FL_FATAL)) +
facet_grid(. ~ FL_FATAL)
D$spec\u order我很惊讶你喜欢你的第一种方式——这是一个令人高兴的巧合。你们大多数物种都有一个N
值(仅限无致命值),但也有少数物种同时有致命值和无致命值。每当有两个以上的数值行对应一个系数时,reorder
使用这些数值的函数进行最终排序。默认函数是mean
,但您可能希望sum
按事件总数排序
# Using reorder isn't working or am i missing something?
ggplot(D, aes(x=N, y=reorder(D$spec, D$N))) +
geom_point(aes(size = N, color = FL_FATAL))
# adding facets makes it worse
ggplot(D, aes(x=N, y=reorder(D$spec, D$N))) +
geom_point(aes(size = N, color = FL_FATAL)) +
facet_grid(. ~ FL_FATAL)
D$spec\u order问题在于,通过在重新排序调用中使用D$
,您对spec
进行了重新排序,与数据帧无关,因此这些值不再与相应的x
值匹配。您需要直接在变量上使用它:
D$spec_order <- reorder(D$spec, D$N, sum)
ggplot(D, aes(x=N, y=spec_order)) +
geom_point(aes(size = N, color = FL_FATAL))
ggplot(D, aes(x=N, y=spec_order)) +
geom_point(aes(size = N, color = FL_FATAL)) +
facet_grid(. ~ FL_FATAL)
问题是,通过在重新排序调用中使用D$
,您正在重新排序spec
,与数据帧无关,因此值不再与相应的x
值匹配。您需要直接在变量上使用它:
D$spec_order <- reorder(D$spec, D$N, sum)
ggplot(D, aes(x=N, y=spec_order)) +
geom_point(aes(size = N, color = FL_FATAL))
ggplot(D, aes(x=N, y=spec_order)) +
geom_point(aes(size = N, color = FL_FATAL)) +
facet_grid(. ~ FL_FATAL)
我懂了。你的第一个情节是一个更好的选择比那些工作。然而,我不确定分面的情节是否正确<代码>D[D$spec==“white”,]
白鲨物种应该有475起事故。顺便说一句,数据是正确的,它已经被聚合,选择了N>10的实例。@MartínBel我并不怀疑你数据的正确性——只是因为致命事件要低得多,所以在只有少数物种有致命计数的情况下,取致命和非致命的平均值真的是丢人现眼。(虽然我认为你的数据中确实有输入错误,“未确认”而不是“未确认”)。至于正确性,@andyteucher正确地诊断出了这个问题。。。在我的测试中,我添加了一个列,其中包含重新排序代码,而不是在ggplot
调用中添加,这确实会产生影响(编辑为正确)。Thx@shujaa,谢谢您的评论和回答。这真的很有用。与我以前做的相比,使用reorder做这件事要好得多。当然,未经证实/未经证实不是鲨鱼物种!原始数据集真的很乱,很难清理。我会解决的,我明白了。你的第一个情节是一个更好的选择比那些工作。然而,我不确定分面的情节是否正确<代码>D[D$spec==“white”,]
白鲨物种应该有475起事故。顺便说一句,数据是正确的,它已经被聚合,选择了N>10的实例。@MartínBel我并不怀疑你数据的正确性——只是因为致命事件要低得多,所以在只有少数物种有致命计数的情况下,取致命和非致命的平均值真的是丢人现眼。(虽然我认为你的数据中确实有输入错误,“未确认”而不是“未确认”)。至于正确性,@andyteucher正确地诊断出了这个问题。。。在我的测试中,我添加了一个列,其中包含重新排序代码,而不是在ggplot
调用中添加,这确实会产生影响(编辑为正确)。Thx@shujaa,谢谢您的评论和回答。这真的很有用。与我以前做的相比,使用reorder做这件事要好得多。当然,未经证实/未经证实不是鲨鱼物种!原始数据集真的很乱,很难清理。我会搞定的,太好了!两个答案都很有用!完美的两个答案都很有用!
ggplot(D, aes(x=N, y=reorder(spec, N, sum))) +
geom_point(aes(size = N, color = FL_FATAL)) +
facet_grid(. ~ FL_FATAL)