作者:手机用户2502916627 | 来源:互联网 | 2023-05-17 15:19
IwanttocreateaheatmapusingggplothoweverIwanttoorderthey-axisbythenumberofobserva
I want to create a heat map using ggplot however I want to order the y-axis by the number of observations. I order the dataframe by the column N and add the number of observations to the group name so that it appears in the axis label. When I plot the data it re-orders based on the group name. Is there a way to set factor levels based on the order they appear in the data frame?
我想用ggplot创建一个热图,但我想按观察次数对y轴进行排序。我按N列对数据帧进行排序,并将观察次数添加到组名称中,以使其显示在轴标签中。当我绘制数据时,它会根据组名重新排序。有没有办法根据数据框中出现的顺序设置因子水平?
Some data:
library(dplyr)
library(tidyr)
library(ggplot2)
school <- c("School A", "SChool B", "School C", "School D", "School E", "School F")
N <- c(25,28,12,22,30,25)
var1 <- c(1,0,1,1,0,1)
var2 <- c(0,0,0,1,0,1)
var3 <- c(0,1,0,1,1,1)
df <- tbl_df (data.frame (school, N, var1, var2, var3))
df <- arrange (df, N) %>%
gather (variable, value, var1:var3)
df$school <- paste0 (df$school, " (", df$N, ")")
df <- select (df, school, variable, value)
ggplot(df, aes(variable, school)) + geom_tile(aes(fill = value), colour = "white") +
scale_fill_gradient(low = "white",high = "steelblue")
Ultimately I want the order of schools to be:
最终我希望学校的顺序是:
School C (12)
C学校(12)
School D (22)
D学校(22)
School A (25)
学校A(25)
School F (25)
F学校(25)
School B (28)
B学校(28)
School E (30)
E学校(30)
As I want to do this for multiple plots I want to find a way to do this automatically and not have to re-set factor levels each time.
由于我想为多个图表执行此操作,我希望找到一种自动执行此操作的方法,而不必每次都重新设置因子级别。
3 个解决方案