我正在使用geom_histogram显示一些调查数据,并希望使用forcats::fct_infreq对这些因素进行排序。
我正在使用一个自定义调色板来匹配一个主题,不幸的是,顺序调色板变得乱七八糟。仅仅重新排序调色板以匹配因素的顺序似乎也不起作用,因为某些原因。
下面的例子。希望有人能用一个更好的方法或一个简单的解决方案来解决这个相对较小但却很烦人的问题。
library(tidyverse)
df <- tibble(
response = c(1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,9,9,9,9,9,10, 10,10, 10,10, 10,10, 10,11, 12,12, 12,12, 12,13, 13,13, 13,13, 14,14, 14,14, 14,14, 14,14, 14,14, 15,15, 15,16, 16,17, 17,17, 18,18, 19,19, 19,20, 20,20, 20,20, 21,21, 21,21, 22,23, 23,23, 23,23, 24,24, 24,24, 25,25, 25,26, 26,27, 28,29, 29,29, 29,29, 29,30, 30,30, 30,30, 31,31, 32,32, 32,33, 33,33, 33,33, 34,34,34,34, 34,34, 34,34, 34,35, 35,35, 35,35, 35,36, 36,36, 36,1),
Q4 = c("Ratings","Reviews","Reading challenge","Search books","My Year in Books","Shelves","Ratings","Reviews","Progress tracking","Reading challenge","Recommendations","Search books","Shelves","Ratings","Reviews","Reading challenge","Recommendations","Search books","Explore","My Year in Books","Ratings","Reviews","Progress tracking","Search books","Lists","Shelves","Ratings","Reading challenge","Lists","My Year in Books","Ratings","Reviews","Progress tracking","Reading challenge","Recommendations","Search books","My Year in Books","Shelves","Ratings","Reviews","Reading challenge","Search books","My Year in Books","Ratings","Reviews","Groups","Lists","Explore","Ratings","Reading challenge","Search books","Lists","My Year in Books","Ratings","Reviews","Progress tracking","Reading challenge","Recommendations","Search books","Explore","My Year in Books","Search books","Ratings","Reviews","Progress tracking","Reading challenge","Search books","Progress tracking","Reading challenge","Recommendations","Search books","My Year in Books","Shelves","Ratings","Reviews","Progress tracking","Groups","Reading challenge","Recommendations","Search books","Lists","My Year in Books","Ratings","Groups","Reading challenge","Reviews","Recommendations","Ratings","Reviews","Search books","Ratings","Reviews","Shelves","Search books","My Year in Books","Shelves","Ratings","Reviews","Progress tracking","Search books","Shelves","Ratings","Search books","Lists","Shelves","Ratings","Reviews","Progress tracking","Search books","Lists","Ratings","Reviews","Progress tracking","Recommendations","Ratings","Reviews","Progress tracking","Shelves","Progress tracking","Search books","Progress tracking","Shelves","Ratings","Reviews","Recommendations","Search books","My Year in Books","Ratings","Reviews","Recommendations","Search books","Explore","Ratings","Reviews","Progress tracking","Recommendations","Search books","Shelves","Ratings","Progress tracking","Reading challenge","Search books","Shelves","Ratings","Reviews","Progress tracking","Recommendations","Search books","Lists","Explore","My Year in Books","Shelves","Ratings","Reviews","Reading challenge","Search books","Lists","Shelves","Ratings","Reviews","Recommendations","Scan books at library/bookstores")
) %>%
mutate_if(is.character, factor)
palette <- c('#e9e5cd', '#ddd6bb', '#d1c7aa', '#c4b89a', '#b8a98a', '#ac9b7b', '#9f8d6d', '#937f60', '#8d6f52', '#885f3b', '#7f5025', '#75420e')# factors NOT in correct order, palette in correct order
df %>%
ggplot(aes(y=Q4, fill=Q4))+
geom_histogram(stat="count")+
scale_fill_manual(values=palette)+
theme(legend.position = "none")

# factors in correct order, palette NOT in correct order
df %>%
ggplot(aes(y=forcats::fct_infreq(Q4), fill=Q4))+
geom_histogram(stat="count")+
scale_fill_manual(values=palette)+
theme(legend.position = "none")

发布于 2022-07-18 02:14:04
我用dplyr::tally代替了forcats::fct_infreq。
df2 <- df %>% group_by(Q4) %>% tally() %>% arrange(desc(n))
df2
# A tibble: 12 × 2
Q4 n
<fct> <int>
1 Ratings 27
2 Search books 24
3 Reviews 23
4 Progress tracking 16
5 Shelves 15
6 Reading challenge 14
7 Recommendations 13
8 My Year in Books 12
9 Lists 9
10 Explore 5
11 Groups 3
12 Scan books at library/bookstores 1
#set levels based on the descending order
df2$Q4 <- factor(df2$Q4, levels=df2$Q4)
#reverse order of palette
palette <- rev(palette)
df2 %>%
ggplot(aes(x=Q4, y=n, fill=Q4))+
geom_col() + #plot with bar chart instead of relying on gghistogram
scale_fill_manual(values=palette)+
theme(legend.position = "none") +
coord_flip()

https://stackoverflow.com/questions/73016017
复制相似问题