edit : завершить обновление, включая информацию из другого ответа, после получения данных (и сохранения их в текстовом файле с именем mlbtmp.txt
) и еще нескольких экспериментов:
selection <- read.table("mlbtmp.txt",skip=1)
names(selection) <- c("row","League","Division","Position","Team")
## arrange order/recode factors
selection <- transform(selection,
Team=factor(Team,levels=rev(levels(Team))),
Position=factor(Position,levels=c("P","I","C","O"),
labels=c("Pitching","Infield",
"Center","Outfield")))
Я играл с различными перестановками facet_grid
, facet_wrap
, scales
, coord_flip
и т. Д. Некоторые работали, как ожидалось, некоторые - нет:
library(ggplot2)
p <- ggplot(data=selection, aes(x=Team, fill= Position)) +
geom_bar(position="stack")
p + facet_grid(.~Division,scales="free_x") + coord_flip() ## OK
## seems to fail with either "free_x" or "free_y"
p + facet_grid(Division~.,scales="free") + coord_flip()
## works but does not preserve 'count' axis:
p + facet_wrap(~Division,scales="free")
Я закончил сfacet_wrap(...,scales="free")
и использовал ylim
для ограничения осей.
p + facet_wrap(~Division,scales="free") + coord_flip() +
ylim(0,60) + opts(axis.text.y=theme_text(hjust=0))
В принципе, может быть способ использования ..density..
, ..ncount..
, ..ndensity..
или одна из других статистических данных, вычисленных по stat_bin
вместо значения по умолчанию ..count..
, но я не смог найти работающую комбинацию.
Вместо этого (как это часто бывает наилучшим решением, когда он застрял в ggplotпреобразования «на лету») Я сам изменил данные:
## pull out Team identification within Division and League
stab <- unique(subset(selection,select=c(Team,Division,League)))
## compute proportions by team
s2 <- melt(ddply(selection,"Team",function(x) with(x,table(Position)/nrow(x))))
## fix names
s2 <- rename(s2,c(variable="Position",value="proportion"))
## merge Division/League info back to summarized data
s3 <- merge(s2,stab)
p2 <- ggplot(data=s3, aes(x=Team, fill= Position,y=proportion)) +
geom_bar(position="stack")+scale_y_continuous(formatter="percent")+
geom_hline(yintercept=0.5,linetype=3)+ facet_wrap(~Division,scales="free") +
opts(axis.text.y=theme_text(hjust=0))+coord_flip()
Очевидно, что здесь можно сделать еще немного приятнее, но это поможет вамбольшая часть пути там ...