pss*_*guy 5 r ggplot2 aesthetics
我试图对最近的MLB草案进行一些分析,其中包括R中的一些ggplots
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
Run Code Online (Sandbox Code Playgroud)
其中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
Run Code Online (Sandbox Code Playgroud)
这让我成为那里的一部分,但是非常缺乏吸引力
a)分组工作但所有团队都显示在每个分区网格中 - 即使每个分区中只有5或6个团队实际 - 并且正确 - 显示数据
b)通过合作翻转,团队按反向字母顺序向下排列.我可以度假吗?左派辩护也很好
c)如何将图例设置为Pitching,Outfield而不是P和O-这是一个我需要设置和包含的向量
d)看到每个球队选择的比例对每种类型的球员都有意义也很有趣.这是通过设置position ="fill"来完成的.我可以将轴设置为%而不是0到1.我还尝试设置geom_vline(aes(xintercept = 0.5) - 和yintercept以防翻转因素 - 但是这条线没有出现在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")))
Run Code Online (Sandbox Code Playgroud)
我打得四处的各种排列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")
Run Code Online (Sandbox Code Playgroud)
我结束facet_wrap(...,scales="free")并习惯ylim约束轴.
p + facet_wrap(~Division,scales="free") + coord_flip() +
ylim(0,60) + opts(axis.text.y=theme_text(hjust=0))
Run Code Online (Sandbox Code Playgroud)

原则上有可能是使用的方式..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()
Run Code Online (Sandbox Code Playgroud)

显然有一点可以在这里完成,但这应该可以让你在那里大部分时间......