所以我在网上找到了一个关于不同国家男性和女性吸烟率的图表,我想按男性吸烟率来排序。
我这里有男性吸烟率+女性吸烟率的订单
countries <- c("China","Russia","Turkey","Greece","Israel","Germany","France",
"Italy","Canada","United Kingdom","United States","India","Australia",
"Brazil","Sweden")
women_rate <- c( 1.6,11.3,14.4, 17.9,12.6,18.6,15.4,12.7,12.3,12.5,12.7,1.7,10.4,7.3,6.8)
men_rate <- c(44.4,43.9,40.6,29.9,27.3,25.4,20.5,20.5,17.3,15.9,15.3,15.2,12.8,12.7,5.9)
country <- rep(countries, 2)
rate <- c(men_rate,women_rate)
gender <- c(rep("men",length(men_rate)),rep("women",length(women_rate)))
smoking_data <- data.frame(country,rate,gender)
library(tidyverse)
library(ggthemes)
ggplot(smoking_data, aes(x=rate,
y=reorder(country,rate),fill=gender)) +
geom_bar(position='dodge', stat='identity')它给出了这个结果图。

我想按男人的吸烟率来定,比如中国,俄罗斯,土耳其,希腊等等。
发布于 2022-11-14 07:29:59
默认情况下,reorder将按所有obs的平均值进行排序。每一组,即在你的情况下,每个国家的男女平均数。
一个解决方法是使用一个“助手列”,其中妇女的值被NA替换,以便在重新排序时只考虑到男性的值。例如,这可以通过使用reorder(country, ifelse(gender == "men", rate, NA), na.rm = TRUE)来实现。
library(ggplot2)
ggplot(smoking_data, aes(
x = rate,
y = reorder(country, ifelse(gender == "men", rate, NA), na.rm = TRUE), fill = gender
)) +
geom_bar(position = "dodge", stat = "identity")

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