R 在y轴80%高度处设置geom_标签y值

R 在y轴80%高度处设置geom_标签y值,r,ggplot2,R,Ggplot2,问题: library(gtable) library(grid) mydata <- read.csv("Opta Stats EPL 2015-16.csv") newdata <- mydata[ which(mydata$MP.Minutes.Played > 900 & mydata$POS != 'GK' & mydata$POS != 'DEF'), ] PlayerX = "Harry Kane" x5 = 0 DensityCha

问题:

library(gtable)
library(grid) 

mydata <- read.csv("Opta Stats EPL 2015-16.csv")


newdata <- mydata[ which(mydata$MP.Minutes.Played > 900 & mydata$POS != 'GK' & mydata$POS != 'DEF'), ]

PlayerX = "Harry Kane"

x5 = 0

DensityChart <- function(METRIC, AlphaState) {

alphax <- AlphaState

x5 = newdata[newdata$Player.Name == PlayerX, "INT.Interceptions"]                 

q100 <- quantile(METRIC, .100)
q0 <- quantile(METRIC, 0)
q25 <- quantile(METRIC, .25)
q50 <- quantile(METRIC, .5)
q75 <- quantile(METRIC, .75)
q95 <- quantile(METRIC, .95)
q100 <- quantile(METRIC, 1)


dens <- density(METRIC)


dd <- with(dens,data.frame(x,y))
library(ggplot2)
qplot(x,y,data=dd,geom="line") + geom_ribbon(data=subset(dd,x>q0 & x<q25),aes(ymax=y),ymin=0,fill="#d7191c",colour="#d7191c",alpha=alphax) + geom_ribbon(data=subset(dd,x>q25 & x<q50),aes(ymax=y),ymin=0,fill="#fdae61",colour="#fdae61",alpha=alphax) + geom_ribbon(data=subset(dd,x>q50 & x<q75),aes(ymax=y),ymin=0,fill="#ffffbf",colour="#ffffbf",alpha=alphax) + geom_ribbon(data=subset(dd,x>q75 & x<q95),aes(ymax=y),ymin=0,fill="#a6d96a",colour="#a6d96a",alpha=alphax) + geom_ribbon(data=subset(dd,x>q95 & x<q100),aes(ymax=y),ymin=0,fill="#1a9641",colour="#1a9641",alpha=alphax) + theme_minimal() + geom_vline(xintercept = x5, linetype = "longdash") + geom_label(data=newdata, aes(x=x5, y=0.02, label=x5), size=3)
}

p1 <- DensityChart(newdata$INT.Interceptions,0.25)
p2 <- DensityChart(newdata$CLR.Clearances,0.25)
p3 <- DensityChart(newdata$Tack.Won.Tackles.Won,0.25)

g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)
g3 <- ggplotGrob(p3)
g <- rbind(g1, g2, g3, size="first") # stack the two plots
g$widths <- unit.pmax(g1$widths, g2$widths) # use the largest widths
# center the legend vertically
g$layout[grepl("guide", g$layout$name),c("t","b")] <- c(1,nrow(g))
grid.newpage()
grid.draw(g)
我有一个函数,可以根据输入创建密度图-我有3个垂直堆叠在gtable布局中。对于每个图形,y轴都会发生变化。我想将geom_标签的y值设置为y轴的一个比例,以使它们达到图形顶部的标准高度

代码:

library(gtable)
library(grid) 

mydata <- read.csv("Opta Stats EPL 2015-16.csv")


newdata <- mydata[ which(mydata$MP.Minutes.Played > 900 & mydata$POS != 'GK' & mydata$POS != 'DEF'), ]

PlayerX = "Harry Kane"

x5 = 0

DensityChart <- function(METRIC, AlphaState) {

alphax <- AlphaState

x5 = newdata[newdata$Player.Name == PlayerX, "INT.Interceptions"]                 

q100 <- quantile(METRIC, .100)
q0 <- quantile(METRIC, 0)
q25 <- quantile(METRIC, .25)
q50 <- quantile(METRIC, .5)
q75 <- quantile(METRIC, .75)
q95 <- quantile(METRIC, .95)
q100 <- quantile(METRIC, 1)


dens <- density(METRIC)


dd <- with(dens,data.frame(x,y))
library(ggplot2)
qplot(x,y,data=dd,geom="line") + geom_ribbon(data=subset(dd,x>q0 & x<q25),aes(ymax=y),ymin=0,fill="#d7191c",colour="#d7191c",alpha=alphax) + geom_ribbon(data=subset(dd,x>q25 & x<q50),aes(ymax=y),ymin=0,fill="#fdae61",colour="#fdae61",alpha=alphax) + geom_ribbon(data=subset(dd,x>q50 & x<q75),aes(ymax=y),ymin=0,fill="#ffffbf",colour="#ffffbf",alpha=alphax) + geom_ribbon(data=subset(dd,x>q75 & x<q95),aes(ymax=y),ymin=0,fill="#a6d96a",colour="#a6d96a",alpha=alphax) + geom_ribbon(data=subset(dd,x>q95 & x<q100),aes(ymax=y),ymin=0,fill="#1a9641",colour="#1a9641",alpha=alphax) + theme_minimal() + geom_vline(xintercept = x5, linetype = "longdash") + geom_label(data=newdata, aes(x=x5, y=0.02, label=x5), size=3)
}

p1 <- DensityChart(newdata$INT.Interceptions,0.25)
p2 <- DensityChart(newdata$CLR.Clearances,0.25)
p3 <- DensityChart(newdata$Tack.Won.Tackles.Won,0.25)

g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)
g3 <- ggplotGrob(p3)
g <- rbind(g1, g2, g3, size="first") # stack the two plots
g$widths <- unit.pmax(g1$widths, g2$widths) # use the largest widths
# center the legend vertically
g$layout[grepl("guide", g$layout$name),c("t","b")] <- c(1,nrow(g))
grid.newpage()
grid.draw(g)
库(gtable)
图书馆(网格)

mydata当绘图有多个具有不同数据源的图层时,使用
0.8*max(y)
并不总是切实可行的,因为绘图中的另一个数据集可能会拉伸比例。在这种情况下,另一种方法是使用自定义grob,其中可以在栅格视口中以“npc”单位放置标签。比如说,

library(ggplot2)
library(grid)

tg <- grobTree(textGrob("there", y=0.8))
qplot(1:10, rnorm(10)) +
  annotation_custom(tg, xmin=5, xmax=5)
库(ggplot2)
图书馆(网格)

tg也许您只需要像
.8*max(dd$y)
这样的东西作为绘图函数中的
geom\u标签
y位置?如果您在问题中添加一个简单的数据集,这会有所帮助,因为我们没有您的CSV文件。@aosmith-排序!非常感谢。有没有办法根据标签所在的面给它上色?