为了将ggplot2
图形“转换”为带有tikzDevice
包的pdf LaTeX图形,我想将轴标记标记放在两个$
之间。当然,如果我手动指定刻度标签,我可以这样做,但是在使用自动刻度标签时怎么做? (特别是在x轴上使用日期时,很难手动指定标签)。
根据@ agstudy的回答,我为数字标签编写了dollarify()
格式化程序:
dollarify <- function(){
function(x) paste0("$",x,"$")
}
和日期的datify()
格式化程序:
datify <- function(){
function(x){
split <- stringr::str_split_fixed(as.character(x),"-",3)
out <- character(nrow(split))
for(i in 1:length(out)){
out[i] <- paste0("\\formatdate{", split[i,3], "}{", split[i,2], "}{", split[i,1], "}")
}
out
}
}
生成一个与datetime
包一起使用的LaTeX代码:
\usepackage[ddmmyyyy]{datetime}
以下是渲染的屏幕截图,使用以下x轴缩放:
scale_x_date(breaks="2 months", labels=datify())
答案 0 :(得分:3)
目前尚不清楚您想要做什么,但我认为您正在寻找轴标签格式化程序。
## forma :you can give here any date format
dollar_date_format <- function (forma = "%H:%M"){
function(x) paste0("$",format(x,forma),"$")
}
然后使用一些数据(请在下次提供可重复的示例),您可以像这样使用它:
DF <- data.frame(time=Sys.time()+1:10,count=1:10)
library(ggplot2)
qplot(x=time,y=count,data=DF)+
scale_x_datetime(labels = dollar_date_format(forma = "%M:%S"))+
xlab("Time (dollars)") +
theme(axis.text.x =element_text(size=20))
答案 1 :(得分:2)
如果您希望一般能够修改轴标签,则可以运行绘图,使用ggplot_build()
将绘制的标签返回,然后添加例如scale_x_continuous()
/ scale_x_date()
在呈现的中断上添加了自定义标签。您需要根据数据类型进行调整(查看build
变量以查看可用的数据)。
您可能希望使用$x/y.labels
或$x/y.major_source
,具体取决于数据类型
x=c("2013-03-22","2013-04-24","2013-07-01","2013-09-13")
y=c(1,2,3,4)
#any ggplot object
g<-qplot(as.Date(x),y)
#call the rendered axis labels
build<-ggplot_build(g)
xrng<-data.frame(build$panel$ranges[[1]]$x.major_source,stringsAsFactors=FALSE)
yrng<-data.frame(build$panel$ranges[[1]]$y.labels,stringsAsFactors=FALSE)
colnames(xrng)<-"value"
colnames(yrng)<-"value"
#create custom labels
xrng$lab<-paste0("$",row.names(xrng),"$")
yrng$lab<-paste0("$",yrng$value,"$")
#re-render with custom labels
g+scale_x_date(breaks=as.Date(xrng$value),labels=xrng$lab) +
scale_y_continuous(breaks=as.numeric(yrng$value),labels=yrng$lab)