2013-12-02 2 views
1

Для того, чтобы «конвертировать» графику ggplot2 в pdf LaTeX-графику с пакетом tikzDevice, я бы хотел поставить метки меток между двумя $. Конечно, я могу это сделать, если я укажу вручную метки меток, но как это сделать при использовании автоматических меток? (в частности, при использовании дат на оси x трудно указать вручную метки).Как положить ggplot2 тикает метки между долларами?

Update - решение с осью этикетки форматировщик

на основе @ 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 
    } 
} 

, который генерирует код LaTeX для использования с пакетом datetime:

\usepackage[ddmmyyyy]{datetime} 

Ниже приведен скриншот рендеринга, используя следующую шкалу для оси х:

scale_x_date(breaks="2 months", labels=datify()) 

enter image description here

ответ

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

enter image description here

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) 

enter image description here

+0

Хорошо знать, что, спасибо. Однако я принимаю ответ @ agstudy, потому что он чище для данной проблемы. –

Смежные вопросы