1

为了ggplot2使用包将图形“转换”为 pdf LaTeX 图形tikzDevice,我想将轴刻度标签放在两个$. 当然,如果我手动指定刻度标签,我可以做到这一点,但是使用自动刻度标签时该怎么办?(特别是在 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())

在此处输入图像描述

4

2 回答 2

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))

在此处输入图像描述

于 2013-12-02T12:08:10.673 回答
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)

在此处输入图像描述

于 2013-12-02T12:42:33.197 回答