如何在绘图标签中将部分标签文本添加删除线?
例如,如果要让y轴标签显示"带有删除线的标签文本?"
ggplot(mpg, aes(x=displ, y=hwy))
+ geom_point()
+ ylab("~~strikethrough~~ text in a label?")
我曾经认为这是一个非常简单的小问题,可以轻易找到解决方案,但是在寻找了一段时间后,却未能找到任何有用信息。
如何在绘图标签中将部分标签文本添加删除线?
例如,如果要让y轴标签显示"带有删除线的标签文本?"
ggplot(mpg, aes(x=displ, y=hwy))
+ geom_point()
+ ylab("~~strikethrough~~ text in a label?")
我曾经认为这是一个非常简单的小问题,可以轻易找到解决方案,但是在寻找了一段时间后,却未能找到任何有用信息。
axis.text.y
创建一个自定义元素函数。我尝试获得一个通用的解决方案,但我认为我的解决方案有点棘手并且不太干净,因为我不得不手动设置一些视口的y位置(请参见代码以获得更好的解释)。library(ggplot2)
library(grid)
ggplot(mpg, aes(x=displ, y=hwy)) +
geom_point() + theme(axis.title.y=element_blank())+
theme( axis.text.y = axis.strike(strike = "label",
lab="strikethrough text in a label?"))
自定义axis.text.y元素的代码:
# user interface : element called by the user
axis.strike = function(strike,lab) {
structure(
list(strike=strike,lab=lab),
## inheritance since it should be a element_text
class = c("element_custom","element_blank")
)
}
element_grob.element_custom <- function(element, x,y) {
## the axis label
g.X <- textGrob(element$lab,rot=90,vjust=-0.25)
## I use the grob text dimensions(height,width,position) to
## create a viewport vp
## within this viewport I create a segment
unit.H <- grobHeight(g.X)
unit.W <- grobWidth(g.X)
rate <- nchar(element$strike)
## search of the position of the text to strike
pos <- as.numeric(gregexpr(element$strike,element$lab)[[1]])
vp=viewport(just="centre",
##BAD OFFSET HERE!!
## TODO: find better way to define viewport y position
y = grobY(g.X,'south')+unit(5,'line'),
yscale=c(0,nchar(element$lab)),
width =unit.W,height=unit.H)
g.seg <- segmentsGrob(vp=vp,x0=0,x1=0,
y0=unit(pos-1,'native'),
y1=unit(pos-1+rate,'native'))
gTree(children=gList(g.seg,g.X,g.seg),cl = "custom_axis")
}
?element_text
中没有这个选项,所以我认为这不是一个选项。 - Stephen Henderson