R 通过平均值对x轴上的方框图进行排序

R 通过平均值对x轴上的方框图进行排序,r,ggplot2,boxplot,R,Ggplot2,Boxplot,我正在尝试使用ggplot2在R中绘制一个箱线图 以下是我的代码和示例数据: df = structure(list(Closeness = c(0.0919540229885057, 0.0950259836674091, 0.0957367240089753, 0.0960240060015004, 0.0901408450704225, 0.0970432145564822, 0.0939794419970631, 0.0943952802359882, 0.092152627789776

我正在尝试使用ggplot2在R中绘制一个箱线图

以下是我的代码和示例数据:

df = structure(list(Closeness = c(0.0919540229885057, 0.0950259836674091, 0.0957367240089753, 0.0960240060015004, 0.0901408450704225, 0.0970432145564822, 0.0939794419970631, 0.0943952802359882, 0.0921526277897768, 0.0914285714285714, 0.0933625091174325, 0.0953090096798213, 0.0917562724014337, 0.0960960960960961, 0.0937728937728938, 0.0909090909090909, NA, 0.0946045824094605, 0.0864280891289669, 0.0879120879120879, 0.0905233380480905, 0.100313479623824, 0.0993017843289372, 0.0942562592047128, 0.0950965824665676, 0.0907801418439716, NA, NA, 0.0950965824665676, 0.0913633119200571, NA, 0.0926864590876177, NA, 0.0948148148148148, 0.0958801498127341, 0.0945347119645495, 0.0931586608442504, 0.090014064697609, 0.0968229954614221, 0.0963855421686747, 0.0926193921852388, 0.0919540229885057, 0.0947446336047372, 0.0917562724014337, 0.0905874026893135, 0.0950965824665676, NA, 0.0926193921852388, 0.0900774102744546, 0.0977845683728037), Var1 = c("Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group", "Group"), Var2 = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "A", "A", "K", "K", "G", "G", "N", "N", "O", "O", "A", "P", "P", "P", "Q", "Q", "Q", "Q", "A", "A", "A", "A", "R", "R", "R", "R", "S", "S", "S", "S", "L", "L", "L", "L", "L", "L", "L")), .Names = c("Closeness", "Var1", "Var2"), row.names = c(NA, 50L), class = "data.frame")

tmp <- data.frame(df, check.names=T)
tmp <- melt(tmp, id="Closeness", variable.name="Var1", value.name="Var2")
tmp$Var1 <- gsub("(.*)\\.[0-9]", "\\1", tmp$Var1)
df <- subset(tmp, Var2!="")

df_g = subset(df, Var1=="Group")
df_c = subset(df, Var1=="Cat")

ggplot(df_c, aes(x = df_g$Var2, y = df_g$Closeness), position = "dodge") + # geom_point() +
geom_boxplot(outlier.size = 1.5) #+ geom_jitter(position=position_jitter(width=.2, height=0))
df=结构(列表(接近度=c(0.091954022988057、0.095025986674091、0.0957367240089753、0.0960240060015004、0.0901408450704225、0.0970432145564822、0.0939794419970631、0.094392802359882、0.092152627789777768、0.0914285714285714、0.09336250917251725、0.0953090096798213、0.096272401437、0.0960961、0.097296009909、609090909、60909090909、90909090909、90909090909、909、909、909、909、909、909、909、909、909、909、909、90964280891289669,0.0879120879120879,0.0905233380480905,0.100313479623824,0.0993017843289372,0.0942562592472128,0.09509658246676,0.0907801418439716,不适用,不适用,不适用,0.0950965858246665676,0.091363311920571,不适用,0.0926864590876177,不适用,不适用,0.0948148148148148148148148148148,0.0958801498127341,0.09457145454949259069694,0.0963855421686747,0.0926193921852388,0.0919540229885057,0.0947446336047372,0.0917562724014337,0.0905874026893135,0.0950965824665676,NA,0.0926193921852388,0.0900774102744546,0.09778456728037),Var1=c(“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”,“组”“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”、“组”,Var2=c(“A”、“B”、“c”、“D”、“E”,“F”,“G”,“H”,“I”,“J”,“K”,“L”,“M”,“A”,“A”,“K”,“K”,“G”,“N”,“N”,“O”,“O”,“A”,“P”,“P”,“Q”,“Q”,“Q”,“Q”,“Q”,“Q”,“Q”,“A”,“A”,“A”,“A”,“A”,“R”,“R”,“S”,“S”,“S”,“L”,“L”,“L”,“L”,“L”,“L”),.Names=c(“紧密度”,“Var1”,“Var2”),row.Names=c(NA,50L),class=“数据框”)

tmp通常我会评论并关闭,例如

  • ,
  • ,
  • ,
  • ,
或者,如果您在堆栈溢出中搜索“ggplot2 order”,几乎会出现任何问题。如果您需要特定于箱线图的示例(方法相同),请参阅

  • ,
甚至是不到两周前你问过的。不同的
geom
,相同的原则

但是,您还有一些其他问题,其中之一是在
aes()
中使用
data$column
,这有点让我恼火,所以我们也来解决这个问题

不要在
aes()中使用
数据$column
这意味着您没有正确使用数据参数。相关:当
df\u g
拥有您所需的一切时,为什么用空数据框
df\u c
启动绘图,一点也不清楚:

ggplot(df_g, aes(x = Var2, y = Closeness), position = "dodge") + 
    geom_boxplot(outlier.size = 1.5) 
正确使用
data
参数,并且在
aes()中未指定
data$列
,将确保您的绘图在所有情况下都能正常工作。如果在
aes()中使用
$
,刻面和其他复杂功能可能不起作用。如果您需要在一个绘图中使用多个数据帧,请在图层级别执行(例如,
geom\u point(data=other\u data,aes(x=x\u var,y=y\u var))
)。您仍然不需要在
aes()内使用
$

至于你提到的两个问题,它们都可以通过编辑数据来解决。
ggplot
非常擅长绘制数据,你只需要让数据看起来像你想要绘制的

我希望类别(A、B、C、d)按降序排列

在您的数据中排序因子

df_g$Var2 = with(df_g, reorder(x = Var2, X = Closeness, FUN = function(x) -mean(x, na.rm = TRUE)))
某些类别只有一个示例(即B、D和e)。我希望在打印之前删除它们

好的,删除它们!您可以从数据中完全删除它们,或者只是将提供给绘图的数据子集:

more_than_one = levels(df_g$Var2)[table(df_g$Var2) > 1]

ggplot(subset(df_g, Var2 %in% more_than_one), aes(Var2, Closeness)) +
    geom_boxplot()

通常情况下,我会以重复的形式进行评论和关闭,例如

  • ,
  • ,
  • ,
  • ,
或者,如果您在堆栈溢出中搜索“ggplot2 order”,几乎会出现任何问题。如果您需要特定于箱线图的示例(方法相同),请参阅

  • ,
甚至是不到两周前你问过的。不同的
geom
,相同的原则

但是,您还有一些其他问题,其中之一是在
aes()
中使用
data$column
,这有点让我恼火,所以我们也来解决这个问题

不要在
aes()中使用
数据$column
这意味着您没有正确使用数据参数。相关:当
df\u g
拥有您所需的一切时,为什么用空数据框
df\u c
启动绘图,一点也不清楚:

ggplot(df_g, aes(x = Var2, y = Closeness), position = "dodge") + 
    geom_boxplot(outlier.size = 1.5) 
正确使用
data
参数,并且在
aes()中未指定
data$列
,将确保您的绘图在所有情况下都能正常工作。如果在
aes()中使用
$
,刻面和其他复杂功能可能不起作用。如果您需要在一个绘图中使用多个数据帧,请在图层级别执行(例如,
geom\u point(data=other\u data,aes(x=x\u var,y=y\u var))
)。您仍然不需要在
aes()内使用
$

至于你提到的两个问题,它们都可以通过编辑数据来解决。
ggplot
非常擅长绘制数据,你只需要让数据看起来像你想要绘制的

我希望类别(A、B、C、d)按降序排列

在您的数据中排序因子

df_g$Var2 = with(df_g, reorder(x = Var2, X = Closeness, FUN = function(x) -mean(x, na.rm = TRUE)))
某些类别只有一个示例(即B、D和e)。我希望在打印之前删除它们

好的,删除它们!您可以从数据中完全删除它们,或者只是将提供给绘图的数据子集:

more_than_one = levels(df_g$Var2)[table(df_g$Var2) > 1]

ggplot(subset(df_g, Var2 %in% more_than_one), aes(Var2, Closeness)) +
    geom_boxplot()

请参阅副本中詹姆斯的答案。对于问题的另一部分(删除仅显示一次的类别),请参阅将此用作副本:请参阅副本中詹姆斯的答案。以及