2016-06-26 3 views
1

у меня есть проблемы в написании некоторых LaTeX выражений в графе в Rstudio, я уже сделал это с помощьюкоманда LaTeX в R участке

axis(..., label=TeX("x_{min}")

Проблема возникает, когда я пытаюсь поставить команду \mathcal{M} в это этикетка. Любой способ получить M, который LaTeX производит с помощью этой команды в R-графике с использованием axis или mtext? Я предпочел бы использовать mtext, но используя его, он даже не производит x_{min} i, созданный с использованием оси, как я писал ранее.

Заранее спасибо за любую помощь

EDIT: по просьбе я поставил здесь пример моего кода

library(latex2exp) 
b=7/5 
fx <- function (x,b) x^(4*(b-1)/(b+1)) *(1/(b-1)+1/x) 
fmin <- optimize(fx, interval=c(0,2), b=7/5) 

x <- seq(10^(-4),20, by = 0.01) 

y <- fx(x,b) 


plot(x, y, log="xy", ann="FALSE", pch=20, type="l",lwd=2, xlim=c(10^(-3),10), ylim=c(1.5,40), 
xaxt="n", yaxt="n") 

mtext("x", side=1, line=2, cex=1, col="black") 
mtext("f(x)", side=2, line=2, cex=1, col="black") 

#assex 
    axis(1,at=fmin[1], label=TeX("x_{min}")) 
    axis(1,at=0.001, label=0.001) 

И другие линии оси, я думаю, что этот код должен работать. он производит что-то, как на картинке ниже, где Blu линии, очевидно, часть кода я не вставить здесь

Plot with that code

+1

# 1 'axis' не имеет' label' аргумент, # 2, где это 'TeX' родом ? Пожалуйста, дополняйте вопросы R минимальным представительным примером (copy-paste-run'able), который иллюстрирует ваши попытки и проблемы. – lukeA

+1

Я отредактировал пост, пишущий мой код, TeX пришел из пакета latex2exp, а у оси ye был аргумент метки, можете ли вы мне помочь? –

+0

Спасибо. Вы имеете в виду '\ mathcal' вместо' \ mathchal'? '' \\ mathcal "% in% latex2exp_supported()' is 'FALSE', что означает, что пакет не поддерживает его. – lukeA

ответ

1

В соответствии с просьбой, я выкладываю решение я нашел. В первую очередь вы можете найти полную документацию здесь: https://cran.r-project.org/web/packages/tikzDevice/vignettes/tikzDevice.pdf

С этим пакетом весь ваш график получает стиль форматирования в формате LaTeX. Таким образом, вы получаете лучшие числа и даже буквы, которые теперь находятся в математическом стиле (если вы используете $$, очевидно). Вы также можете добавить несколько букв через некоторые команды, которые вы не сможете добавить без него. Мне понадобилось, например, ввести эту команду LaTeX: \ mathcal {M}

Это решение, которое я нашел, используя пакет tikzDevice. Этот пакет позволяет вам создать файл, который мы назовем «plot.tex» из вашего участка R. Вы не увидите сюжет немедленно (или, по крайней мере, я еще не узнал об этом). Как только пакет создает этот plot.tex, вы должны включить его в другой из ваших .tex-файлов. Файл, в котором вы хотите его отобразить. Это путь:

\begin{figure} 
    \input{plot.tex} 
\end{figure}  

явно положить

\usepackage{tikz} 

в преамбуле.

Код в Rstudio больше или меньше, как это, имея в виду код на мой вопрос:

#Defintion of f 
b=7/5 
fx <- function (x,b) x^(4*(b-1)/(b+1)) *(1/(b-1)+1/x) 

#find minimum of f (oviously optional) 
fmin <- optimize(fx, interval=c(0,2), b=7/5) 

#Density of points in the x-asxis 
x <- seq(10^(-4),20, by = 0.01) 

#Assign value to y 
y <- fx(x,b) 


#call the tikzDevice package, don't forget the dev.off() at the end or you won't be able to produce a proper file 
library(tikzDevice) 

#name the file you want to create and decide its dimensions 
tikz('faggy.tex', 
width=5.5,height=4) 

#do your normal plot as usual: you can add any LaTeX symbol as you can see below 


#plot_f(x)_______________ 
    plot(x, y, log="xy", ann="FALSE", pch=20, type="l",lwd=2, xlim=c(10^(-3),10), 
     ylim=c(1.5,40), xaxt="n", yaxt="n") 

#code useful to plot the lines that touch of the minimum of the function 
linea1 <- seq(1,fmin[[2]], by = 0.01) 
xminimo <- numeric(length(linea1)) 
xminimo <- rep(fmin[1],length(linea1)) 

linea2 <- seq(10^(-4),fmin[[1]], by = 0.01) 
fminimo <- numeric(length(linea2)) 
fminimo <- rep(fmin[2],length(linea2)) 

#plot_lines___ 
    points(xminimo,linea1, pch=20, type="l", lwd=2, lty=2, col="blue") 

    points(linea2,fminimo, pch=20, type="l", lwd=2, lty=2, col="blue") 


#writing on the axis: you can use LaTeX here!!! any symbol or command, like \mathcal{} 
mtext("$x$", side=1, line=2, cex=1, col="black") 
mtext("$f(x)$", side=2, line=2, cex=1, col="black", las=2) 

#assex, example of the use \mathcal, I didn't need it there oviously :) 
    axis(1,at=fmin[1], label=paste("$\\mathcal{M}_{min}$")) 
    axis(1,at=0.001, label=0.001) 
    axis(1,at=0.01, label=0.01) 
    axis(1,at=1, label=1) 
    axis(1,at=10, label=10) 

#assey 
    axis(2,at=fmin[2], label=paste("$f_{min}$"),las = 2) 
    axis(2,at=2, label=2,las = 2) 
    axis(2,at=5, label=5,las = 2) 
    axis(2,at=10, label=10,las = 2) 
    axis(2,at=20, label=20,las = 2) 
    axis(2,at=40, label=40,las = 2) 




dev.off() 
Смежные вопросы