簡體   English   中英

使用 ggplot2 中的條形圖在組內重新排序不起作用

[英]Reordering within groups not working using bar plot from ggplot2

我最初問了這個問題,但它被標記為重復,我應該遵循這個解決方案如何在所有方面對條形進行排序? .

這是我的 top5_producers 變量的 dput

structure(list(iso3_code = c("BGD", "CHN", "CHN", "CHN", "DEU", 
"EGY", "IDN", "IDN", "IND", "IND", "JPN", "KOR", "MEX", "MEX", 
"MMR", "NLD", "NLD", "PAK", "VNM", "VNM"), country = c("Bangladesh", 
"China", "China", "China", "Germany", "Egypt", "Indonesia", "Indonesia", 
"India", "India", "Japan", "South korea", "Mexico", "Mexico", 
"Myanmar", "Netherlands", "Netherlands", "Pakistan", "Viet Nam", 
"Viet Nam"), source_crop = c("Sugar cane", "Oil palm fruit", 
"Soybeans", "Sugar cane", "Oil palm fruit", "Maize", "Soybeans", 
"Sugar cane", "Oil palm fruit", "Sugar cane", "Maize", "Maize", 
"Maize", "Soybeans", "Sugar cane", "Oil palm fruit", "Soybeans", 
"Oil palm fruit", "Maize", "Soybeans"), FC_imports = c(1949020L, 
5457164L, 84505368L, 3062047L, 2201599L, 8652235L, 6311197L, 
4761885L, 8335597L, 2119435L, 15342352L, 9804926L, 14217581L, 
6540675L, 2205780L, 3867813L, 7534711L, 2817298L, 8228098L, 6273590L
)), row.names = c(NA, -20L), .internal.selfref = <pointer: 0x7f953580b2e0>, class = c("tbl_df", 
"tbl", "data.frame"))

這是我的代碼

scale_x_reordered <- function(..., sep = "___") {
    reg <- paste0(sep, ".+$")
    ggplot2::scale_x_discrete(labels = function(x) gsub(reg, "", x), ...)
  }

reorder_within <- function(x, by, within, fun = mean, sep = "___", ...) {
  new_x <- paste(x, within, sep = sep)
  stats::reorder(new_x, by, FUN = fun)
}

plot_data = top5_producers %>% 
  group_by(source_crop) %>% 
  arrange(source_crop, FC_imports) %>% 
  mutate(order = row_number())

plot_data %>%  
  ggplot(aes(reorder_within(country, FC_imports, source_crop), FC_imports)) +
  geom_bar(stat="identity") +
  coord_flip() +
  scale_x_reordered() +
  facet_wrap(~source_crop, scales = "free") +
  theme(axis.text.x=element_text(angle=90,hjust=1,vjust=.5,colour='gray50'))

我的輸出是

在此處輸入圖片說明

如您所見,x 軸上的值消失了,y 值中添加了文本(與上面鏈接的原始問題中的圖像相比)。 老實說,我不知道該怎么做,希望得到一些幫助。 我希望每個方面的條形都有不同的顏色,並且應該在每個方面內排序。

會話信息:

R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Catalina 10.15.3

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] tmap_2.2            rnaturalearth_0.1.0 strucchange_1.5-2   sandwich_2.5-1      zoo_1.8-6          
 [6] WDI_2.6.0           ggpubr_0.2.3        magrittr_1.5        segmented_1.0-0     scales_1.0.0       
[11] spData_0.3.0        countrycode_1.1.0   janitor_1.2.0       data.table_1.12.2   forcats_0.4.0      
[16] stringr_1.4.0       dplyr_0.8.3         purrr_0.3.3         readr_1.3.1         tidyr_1.0.0        
[21] tibble_2.1.3        ggplot2_3.2.1       tidyverse_1.2.1    

loaded via a namespace (and not attached):
 [1] nlme_3.1-140       satellite_1.0.1    sf_0.7-4           lubridate_1.7.4    webshot_0.5.1     
 [6] RColorBrewer_1.1-2 httr_1.4.0         SnowballC_0.6.0    mapview_2.7.0      tools_3.6.1       
[11] backports_1.1.5    utf8_1.1.4         rgdal_1.4-3        R6_2.4.1           KernSmooth_2.23-15
[16] rgeos_0.4-3        DBI_1.0.0          lazyeval_0.2.2     colorspace_1.4-1   raster_2.8-19     
[21] withr_2.1.2        sp_1.3-1           tidyselect_0.2.5   leaflet_2.0.2      compiler_3.6.1    
[26] cli_1.1.0          rvest_0.3.3        xml2_1.2.0         labeling_0.3       classInt_0.3-3    
[31] digest_0.6.21      base64enc_0.1-3    dichromat_2.0-0    pkgconfig_2.0.3    htmltools_0.4.0   
[36] htmlwidgets_1.5.1  rlang_0.4.2        readxl_1.3.1       rstudioapi_0.10    shiny_1.3.2       
[41] generics_0.0.2     jsonlite_1.6       crosstalk_1.0.0    tokenizers_0.2.1   Matrix_1.2-17     
[46] fansi_0.4.0        Rcpp_1.0.3         munsell_0.5.0      lifecycle_0.1.0    stringi_1.4.3     
[51] RJSONIO_1.3-1.1    tmaptools_2.0-1    grid_3.6.1         promises_1.0.1     crayon_1.3.4      
[56] lattice_0.20-38    haven_2.1.0        splines_3.6.1      hms_0.5.1          zeallot_0.1.0     
[61] pillar_1.4.2       ggsignif_0.6.0     stats4_3.6.1       codetools_0.2-16   XML_3.98-1.20     
[66] glue_1.3.1         tidytext_0.2.2     modelr_0.1.4       png_0.1-7          vctrs_0.2.0       
[71] httpuv_1.5.1       cellranger_1.1.0   gtable_0.3.0       assertthat_0.2.1   mime_0.6          
[76] lwgeom_0.1-7       xtable_1.8-4       broom_0.5.2        e1071_1.7-1        janeaustenr_0.1.5 
[81] later_0.8.0        class_7.3-15       viridisLite_0.3.0  units_0.6-3        ellipsis_0.3.0    
[86] spDataLarge_0.3.1 

tidytext::reorder_withintidytext::scale_x_reordered應該可以解決問題:

plot_data %>%  
  ungroup() %>% 
  mutate(country = tidytext::reorder_within(
    country, FC_imports, source_crop)) %>% 
  ggplot(aes(x = country, y = FC_imports, fill = source_crop)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~source_crop, scales = "free_y") +
  coord_flip() +
  tidytext::scale_x_reordered()

請參閱Julia Silge的博客文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM