R 具有2个变量的geom_点图中的排序
我正在使用点图进行分析,每个x变量有两个y变量。我想安排图表,使其下降一个y变量。我在aes中使用了reorder函数,它稍微重新排序,但不是完全重新排序。图1是它之前的样子,图2是我使用重新排序后的样子 图1: 图2: 代码如下: 答案%>% ggplotaesx=reorderlocale,-百分比,y=percent,fill=box+ geom_dotplotbinaxis='y', stackdir='center', dotsize=1, binwidth=0.01+R 具有2个变量的geom_点图中的排序,r,ggplot2,charts,dplyr,R,Ggplot2,Charts,Dplyr,我正在使用点图进行分析,每个x变量有两个y变量。我想安排图表,使其下降一个y变量。我在aes中使用了reorder函数,它稍微重新排序,但不是完全重新排序。图1是它之前的样子,图2是我使用重新排序后的样子 图1: 图2: 代码如下: 答案%>% ggplotaesx=reorderlocale,-百分比,y=percent,fill=box+ geom_dotplotbinaxis='y', stackdir='center', dotsize=1, binwidth=0.01+ geom_e
geom_errorbaraesymin=ci_lo,ymax=ci_hi,width=.5,position=position_dodge0正如评论中指出的那样,您没有提供数据,但我想我知道您的错误所在 下面是一些示例数据。我将使用修改后的mtcars作为示例,我们将根据品牌查看汽车的最小和最大重量
library(tidyverse)
df <- mtcars %>% rownames_to_column() %>%
select(car = rowname, wt) %>%
mutate(car = gsub("\\s.*?$", "", car)) %>%
group_by(car) %>%
mutate(n = n()) %>%
filter(n > 1) %>%
arrange(car,wt) %>%
filter(row_number() == max(row_number()) | row_number() == min(row_number())) %>%
select(-n) %>%
ungroup() %>%
mutate(stat = rep(c("min", "max"), nrow(.)/2)) %>%
spread(stat, wt)
print(df)
# car max min
# Fiat 2.2 1.94
# Hornet 3.44 3.22
# Mazda 2.88 2.62
# Merc 4.07 3.15
# Toyota 2.46 1.84
现在让我们谈谈你想做什么。你说你想按你的一个变量降序排序
df %>%
arrange(-max)%>%
mutate(car = factor(car, levels = car))%>%
ggplot(aes(x = car))+
geom_point(aes(y = max), color = "red")+
geom_point(aes(y = min), color = "blue")
或
我认为这里的关键是,您需要整理数据,然后设置因子级别以获得所需的输出。如果您的数据不是一个因素,那么ggplot将使用字母顺序。您可能需要传播数据,以便使用上述确切方法
更新
通过安排两个变量,您可以在不传播数据的情况下实现这一点
df %>%
arrange(-max)%>%
mutate(car = factor(car, levels = car))%>%
ggplot(aes(x = car))+
geom_point(aes(y = max), color = "red")+
geom_point(aes(y = min), color = "blue")
这里我们将把上面的数据修改为长格式
df2 <- df %>% gather(measure, value, -car)
然后我们可以在不扩散的情况下进行安排
df2 %>%
arrange(-value, measure) %>%
mutate(car = factor(car, levels = unique(car)))%>%
ggplot(aes(x = car, y = value, color = measure))+
geom_point()
或按分钟下降
df2 %>%
arrange(desc(measure), -value) %>%
mutate(car = factor(car, levels = unique(car)))%>%
ggplot(aes(x = car, y = value, color = measure))+
geom_point()
欢迎来到SO。在尝试使用代码片段功能时做得很好,我从未使用过它,而且它看起来很漂亮。但是,-如果您之前没有定义答案并加载所需的包,那么您的代码将不起作用。请提供此示例数据,您可能会发现forcats::reorder在这方面很有用,因为它以直观的方式管理因子级别的顺序。确保在将数据帧传递给ggplot2之前执行此操作。谢谢!我不知道如何上传我的数据,这就是为什么我只是把截图,但感谢你给了这个机会。我想关键是我需要把数据分散开来。实际上,我在同一列中有两个变量,只是试图对该列的一部分进行排序,这就是它变得混乱的地方。把它摊开解决了问题,然后这个安排就起作用了。非常感谢。你可以这样做而不扩散。等一下,我会更新的。我只是没早点想到。
df2 %>%
arrange(-value, measure) %>%
mutate(car = factor(car, levels = unique(car)))%>%
ggplot(aes(x = car, y = value, color = measure))+
geom_point()
df2 %>%
arrange(desc(measure), -value) %>%
mutate(car = factor(car, levels = unique(car)))%>%
ggplot(aes(x = car, y = value, color = measure))+
geom_point()