我正在尝试使用R中的ggplots对最近的MLB草案进行一些分析。

selection <- draft[c("Team","Division","Position")]
head(selection)

  Team   Division Position
1  pit NL Central        P
2  sea AL West           P
3  ari NL West           P
4  bal AL East           P
5  kc  AL Central        O
6  was NL East           I

其中P =投手,O =外场等。

我想显示每个分区中按职位划分的团队选择的球员数量
p <- ggplot(data=selection, aes(x=Team, fill= Position))  + geom_bar(position="stack")
p <-  p + coord_flip()
p <- p+ ylab("Players Selected")
p <- p + facet_wrap(~Division)
p

这使我成为那里的一部分,但没有吸引力

a)分组工作,但所有团队都显示在每个分区网格中-尽管每个分区中只有5或6个团队实际上-正确-显示数据

b)使用“co-ord”翻转,将以相反的字母顺序在下一页中列出团队。我可以诉诸。留下理由也很好

c)如何将图例设置为Pitching,Outfield而不是P和O-这是我需要设置并包含的向量吗

d)看到每个团队选择对每种类型的球员所占的比例也是很有趣的。这可以通过设置position =“fill”来完成。我是否可以将轴设置为%而不是0到1?
但该线未出现在沿x轴的中间标记处

帮助非常感谢

最佳答案

编辑:在获取数据(并将其存储在名为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_gridfacet_wrapscalescoord_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()

很明显,这里可以做更多的修饰,但这应该可以帮助您实现大部分目标……

关于r - 自定义多面条形图的美学,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6297677/

10-12 18:10