gpt4 book ai didi

r - ggplot条形图,具有与面相关的类别顺序

转载 作者:行者123 更新时间:2023-12-03 13:24:32 24 4
gpt4 key购买 nike

我已经看到了许多关于如何(重新)排列条形图中的类别的问题(通常链接到Order Bars in ggplot2 bar graph)。

我所追求的只是有所不同,但是我还没有找到一种好的方法:我有一个多面条形图,并且我想根据另一个变量分别为每个构面分别定x轴(在我的情况下,该变量本身就是y值,即,我只希望条形在每个小平面上的长度都增加)。

简单的例子,例如Order Bars in ggplot2 bar graph:

df <- data.frame(name=c('foo','bar','foo','bar'),period=c('old','old','recent','recent'),val=c(1.23,2.17,4.15,3.65))
p = ggplot(data = df, aes(x = reorder(name, val), y = val))
p = p + geom_bar(stat='identity')
p = p + facet_grid(~period)
p

我们得到的是以下内容:

而我想要的是:

最佳答案

好的,所以抛开所有哲理,如果有人感兴趣,这里有一个丑陋的技巧。想法是使用不同的标签(除了我将句点替换为0空格,1空格等,以便它们不显示之外,请考虑paste(period, name))。我需要这个情节,我不想安排杂技之类的东西,因为我可能想共享一个共同的图例,等等。

前面给出的原子示例变为:

df <- data.frame(name=c('foo','bar','foo','bar'),
period=c('old','old','recent','recent'),
val=c(1.23,2.17,4.15,3.65),
stringsAsFactors=F)
df$n = as.numeric(factor(df$period))
df = ddply(df,.(period,name),transform, x=paste(c(rep(' ',n-1), name), collapse=''))
df$x = factor(df$x, levels=df[order(df$val), 'x'])
p = ggplot(data = df, aes(x = x, y = val))
p = p + geom_bar(stat='identity')
p = p + facet_grid(~period, scale='free_x')
p

另一个示例,仍然有些愚蠢,但更接近我的实际用例:
df <- ddply(mpg, .(year, manufacturer), summarize, mixmpg = mean(cty+hwy))
df$manufacturer = as.character(df$manufacturer)
df$n = as.numeric(factor(df$year))
df = ddply(df, .(year,manufacturer), transform,
x=paste(c(rep(' ',n-1), manufacturer), collapse=''))
df$x = factor(df$x, levels=df[order(df$mixmpg), 'x'])
p = ggplot(data = df, aes(x = x, y = mixmpg))
p = p + geom_bar(stat='identity')
p = p + facet_grid(~year, scale='free_x')
p = p + theme(axis.text.x=element_text(angle=90,hjust=1,vjust=.5,colour='gray50'))
p

闭上你的眼睛,想起帝国,然后尝试享受。

关于r - ggplot条形图,具有与面相关的类别顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com