排序 geom_col 不是按填充值
Ordering geom_col NOT by fill value
请抵制跳入定义因素水平的直觉。我正在尝试制作带有文本注释的条形图。我将 geom_col 与 y 值美学一起使用,并且将 geom_text 与单独的数据框一起使用,其中值已转换为累计和。这里的顺序很重要,我想根据计算累积和的相同顺序进行绘图。
示例
library(ggplot2)
library(data.table)
example_df <- data.frame(gender = c('M', 'F', 'F', 'M'), month = c('1', '1', '2', '2'),
value = c(10, 20, 30, 40), name = c('Jack', 'Kate', 'Nassrin', 'Malik'))
setDT(example_df)
text_df <- example_df[, .(value=cumsum(value), name=name), by='month']
ggplot(example_df) + geom_col(aes(x=month, y=value, fill=gender)) +
geom_text(data=text_df, aes(x=month, y=value, label=name), vjust=1)
如果你能看到这里,左边正是我想要的。杰克在 M 颜色上被标记为 10,凯特在 F 颜色上被标记为 20。右边虽然是错误的。 Nassrin 被标记为 30,但在高度为 40 的 M 颜色之上。这是因为 geom_col 默认按填充顺序排列,它被转换为按字母顺序排列的因子。我在这里想要的是左边的图被排序为 M、F,而右边的图被排序为 F、M。这可能吗?或者是重新排序我的累计总和的最佳解决方案(这会导致与我预期的不同的情节)。
分别设置group
和fill
。堆叠的顺序(即 position)由 group
控制,当你没有定义时它会自动设置(在这种情况下 [=13 的定义=] 被使用)。所以:
ggplot(example_df) +
geom_col(aes(x=month, y=value, group = fct_rev(fct_inorder(name)), fill = gender)) +
geom_text(data=text_df, aes(x=month, y=value, label=name), vjust=1)
请注意,我们也可以让 ggplot
为我们计算累加和。然后我们可以只使用原始的 data.frame,将您的情节简化为:
ggplot(example_df, aes(month, value, group = fct_rev(fct_inorder(name)),)) +
geom_col(aes(fill = gender)) +
geom_text(aes(label = name), position = 'stack', vjust = 1)
请抵制跳入定义因素水平的直觉。我正在尝试制作带有文本注释的条形图。我将 geom_col 与 y 值美学一起使用,并且将 geom_text 与单独的数据框一起使用,其中值已转换为累计和。这里的顺序很重要,我想根据计算累积和的相同顺序进行绘图。
示例
library(ggplot2)
library(data.table)
example_df <- data.frame(gender = c('M', 'F', 'F', 'M'), month = c('1', '1', '2', '2'),
value = c(10, 20, 30, 40), name = c('Jack', 'Kate', 'Nassrin', 'Malik'))
setDT(example_df)
text_df <- example_df[, .(value=cumsum(value), name=name), by='month']
ggplot(example_df) + geom_col(aes(x=month, y=value, fill=gender)) +
geom_text(data=text_df, aes(x=month, y=value, label=name), vjust=1)
如果你能看到这里,左边正是我想要的。杰克在 M 颜色上被标记为 10,凯特在 F 颜色上被标记为 20。右边虽然是错误的。 Nassrin 被标记为 30,但在高度为 40 的 M 颜色之上。这是因为 geom_col 默认按填充顺序排列,它被转换为按字母顺序排列的因子。我在这里想要的是左边的图被排序为 M、F,而右边的图被排序为 F、M。这可能吗?或者是重新排序我的累计总和的最佳解决方案(这会导致与我预期的不同的情节)。
分别设置group
和fill
。堆叠的顺序(即 position)由 group
控制,当你没有定义时它会自动设置(在这种情况下 [=13 的定义=] 被使用)。所以:
ggplot(example_df) +
geom_col(aes(x=month, y=value, group = fct_rev(fct_inorder(name)), fill = gender)) +
geom_text(data=text_df, aes(x=month, y=value, label=name), vjust=1)
请注意,我们也可以让 ggplot
为我们计算累加和。然后我们可以只使用原始的 data.frame,将您的情节简化为:
ggplot(example_df, aes(month, value, group = fct_rev(fct_inorder(name)),)) +
geom_col(aes(fill = gender)) +
geom_text(aes(label = name), position = 'stack', vjust = 1)