我调用ggplot函数
ggplot(data,aes(x,y,fill=category)+geom_bar(stat="identity")
结果是一个条形图,其中的条形由与类别对应的各种颜色填充。然而,颜色的顺序从条到条并不一致。说有粉红色,绿色和蓝色。有些条从下到上变成粉红色,绿色,蓝色,有些条变成绿色,粉红色,蓝色。我看不出有什么明显的规律。
这些排序是如何选择的?我怎么能改变它?至少,我如何才能让ggplot选择一个一致的排序?
(x,y和category)的类分别是(integer,numeric和factor)。如果我将category设置为有序因子,则不会更改此行为。
有谁知道怎么解决这个问题吗?
可重复的示例:
data <- data.frame(
mon = c(
9L, 10L, 11L, 10L, 8L, 7L, 7L, 11L, 9L, 10L, 12L, 11L, 7L,
12L, 8L, 12L, 9L, 7L, 9L, 10L, 10L, 8L, 12L, 7L, 11L, 10L, 8L,
7L, 11L, 12L, 12L, 9L, 9L, 7L, 7L, 12L, 12L, 9L, 9L, 8L
),
gclass = ordered(c(
"Up-Up", "Down-Down", "Up-Stable", "Stable-Up", "Stable-Down",
"Stable-Down", "Down-Up", "Stable-Up", "Down-Stable", "Stable-Down",
"Down-Down", "Down-Down", "Stable-Stable", "Up-Down", "Down-Down",
"Stable-Up", "Up-Stable", "Stable-Up", "Stable-Down", "Up-Down",
"Up-Stable", "Up-Down", "Up-Up", "Up-Stable", "Down-Up", "Stable-Stable",
"Up-Up", "Down-Stable", "Up-Down", "Down-Up", "Stable-Stable",
"Stable-Stable", "Up-Down", "Up-Down", "Up-Up", "Down-Stable",
"Stable-Down", "Down-Down", "Down-Up", "Up-Stable"
)),
NG = c(
222614.67, 9998.17, 351162.2, 37357.95, 4140.48, 1878.57, 553.86, 40012.25,
766.52, 15733.36, 90676.2, 45000.29, 0, 375699.84, 2424.21, 93094.21,
120547.69, 291.33, 1536.38, 167352.21, 160347.01, 26851.47, 725689.06,
4500.55, 10644.54, 75132.98, 42676.41, 267.65, 392277.64, 33854.26, 384754.67,
7195.93, 88974.2, 20665.79, 7185.69, 45059.64, 60576.96, 3564.53, 1262.39,
9394.15
)
)
ggplot(data, aes(mon, NG, fill = gclass)) + geom_bar(stat = "identity")
6条答案
按热度按时间lc8prwob1#
从ggplot2_2.0.0开始,
order
美学不再可用。要获得一个堆栈按填充颜色排序的图形,您可以简单地按要排序的分组变量对数据集进行排序。我经常使用 dplyr 中的
arrange
。在这里,我在ggplot
调用中按fill
因子对数据集进行排序,而不是创建一个有序的数据集,但两者都可以正常工作。当然,这在base R中很容易做到,使用经典的
order
和提取括号:两种情况下的结果图现在都按所需顺序显示:
ggplot2_2.2.0更新
在ggplot_2.2.0中,填充顺序基于因子水平的顺序。默认顺序将在堆栈的 * 顶部 * 而不是底部绘制第一个级别。
如果你想在堆栈底部的第一层,你可以在
position_stack
中使用reverse = TRUE
。注意,您也可以使用geom_col
作为geom_bar(stat = "identity")
的快捷方式。7cjasjjr2#
您还需要指定
order
外观。这可能是也可能不是bug。
gv8xihay3#
要订购,您必须使用
levels
参数并通知订单。就像这样:taor4pac4#
您可以使用
scale_fill_
函数更改颜色。例如:要在
bars
中获得一致的排序,则需要对 Dataframe 进行排序:要更改图例的顺序,请更改
gclass
因子。比如说ecfdbz9o5#
由于此交换首先显示为“因子填充订单”,因此我将添加一个解决方案,我认为这是一个更直接的解决方案,并且不需要更改您的基础数据。
或者,我更喜欢的是,我首先创建一个变量向量,以简化稍后的编码并使其更易于编辑:
在geom_col()中不需要reverse position元素,我保留了这些元素作为提醒,以防我想反转,但您可以通过消除它来进一步简化。
w1jd8yoj6#
基于@aosmith的答案,我发现另一种订购酒吧的方法稍微更直观一些:
base stats包中的reorder函数的妙处在于,你可以在
reorder(based_on_dimension, y, function)
中应用它,其中y是用sum、mean等函数根据based_on_dimension排序的。