将列添加到ggplot2图表

时间:2016-04-18 11:23:08

标签: r charts ggplot2

我已经得到以下代码(使用ggplot2),输出下表:

ggplot(final,aes(x=final$Players,y=final$AvgPts,ymin=final$min,ymax=final$max)) +
geom_pointrange() + theme_bw() + coord_flip() + 
geom_hline(yintercept = min(final$min)-1,linetype="dotted") + ylab("") + 
xlab("") +geom_text(aes(label=final$AvgPts),hjust=0.5, vjust=-0.8, size=3) + 
ggtitle(paste("2016 Moneyball Average Spreads for ",pos," averaging more than",points)) +
theme(plot.title = element_text(size=10, face="bold"))

enter image description here

我希望能够做的是在表的右侧添加几列,例如在森林图中,两列将是:

column1<-final$salary/final$AvgPts
column2<-final$sd

如果可能,我还希望能够在这些列中重新排序图表。

是否还有一种方法可以在最终$ AvgPts上重新排序现有图表?

final的结构如下:

Gms AvgPts   max   min    sd         Moneyball   Team salary position playing.status                           Players
   (dbl)  (dbl) (dbl) (dbl) (dbl)             (chr) (fctr)  (dbl)   (fctr)         (fctr)                             (chr)
1      3  92.00   107    81 13.45        Adam Oxley    COL   6100      MID          Start        Adam Oxley, COL, MID, 6100
2      4 107.00   130    88 20.30      Adam Treloar    COL   8500      MID          Start      Adam Treloar, COL, MID, 8500
3      3  97.67   110    91 10.69      Bernie Vince    MEL   7300      MID      Not Named      Bernie Vince, MEL, MID, 7300
4      4  91.00   119    59 28.66        Jack Viney    MEL   6500      MID          Start        Jack Viney, MEL, MID, 6500
5      4 107.50   142    71 33.91      Jack Ziebell     NM   7500      MID          Start       Jack Ziebell, NM, MID, 7500
6      4 101.25   130    68 25.53      Lachie Neale    FRE   8500      MID          Start      Lachie Neale, FRE, MID, 8500
7      4 110.75   143    55 38.40          Nat Fyfe    FRE   8400      MID          Start          Nat Fyfe, FRE, MID, 8400
8      4 102.00   114    86 11.78  Scott Pendlebury    COL   9200      MID          Start  Scott Pendlebury, COL, MID, 9200
9      2 108.00   128    88 28.28 Steele Sidebottom    COL   8500      MID          Start Steele Sidebottom, COL, MID, 8500
10     4 104.75   114    95  8.14      Taylor Adams    COL   8000      MID          Start      Taylor Adams, COL, MID, 8000

1 个答案:

答案 0 :(得分:1)

要添加其他图表,有两种解决方案:

  • 使用ggplot2,使用函数facet_wrap
  • 使用库griExtragrid.arrange可以创建多个ggplots。

关于重新排序的具体代码,最简单的方法是重新排序因子级别。

final$Players<-factor(final$Players, levels = unique(final$Players)[order_vector])

此外,在aes ggplot中,只应传递列的名称而不是矢量项。例如,您可以重写:

ggplot(data = final,aes(x=Players,y=AvgPts,ymin=min,ymax=max)) 

修改

订购矢量

我想你想按每个玩家的意思订购。

Mean<-sapply(unique(final$Players),function(z){
   mean(final$AvgPoints[as.character(final$Players) == as.character(z)),]
   }
   )
final$Players<-factor(final$Players, levels = unique(final$Players)[order(Mean)])

使用gridExtra

在图表的侧面添加一个表格
library(gridExtra)
g1<-ggplot(final,aes(x=Players,AvgPts,ymin=min,ymax = max)) + ...
g2<-tableGrob(head(final[,c("salary",sd)]))
grid.arrange(g1,g2, ncol=1)

有关ggplotgridExtra的更多信息,请访问:https://github.com/hadley/ggplot2/wiki/Mixing-ggplot2-graphs-with-other-graphical-output