Слишком большое число функций TikZ

Слишком большое число функций TikZ

Я хочу нарисовать два бета-распределения, сравнивая априорное и апостериорное распределение, но кажется, что коэффициенты слишком велики для LaTeX? Как это исправить, не меняя функцию? В ней есть несколько ошибок, включая Dimension too largeи Number too big.

\documentclass[10pt]{article}  
\usepackage{pgf,tikz}  
\usetikzlibrary{arrows}  
\pagestyle{empty}  
\begin{document}  
\definecolor{qqccqq}{rgb}{0,0.8,0}  
\definecolor{qqttcc}{rgb}{0,0.2,0.8}  
\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=8.333333333333332cm,y=1.0cm]  
\draw[->,color=black] (-0.1,0) -- (1.1,0);  
\foreach \x in {,0.2,0.4,0.6,0.8,1}  
\draw[shift={(\x,0)},color=black] (0pt,2pt) -- (0pt,-2pt) node[below] {\footnotesize $\x$};  
\draw[color=black] (1.04,0.04) node [anchor=south west] { $\theta$};  
\draw[->,color=black] (0,-0.5) -- (0,5.5);    
\foreach \y in {,1,2,3,4,5}    
\draw[shift={(0,\y)},color=black] (2pt,0pt) -- (-2pt,0pt) node[left] {\footnotesize $\y$};  
\draw[color=black] (0pt,-10pt) node[right] {\footnotesize $0$};  
\clip(-0.1,-0.5) rectangle (1.1,5.5);  
\draw[dash pattern=on 1pt off 1pt,color=qqttcc, smooth,samples=100,domain=8.000000000003847E-7:0.9999990727280006] plot(\x,{3682570000*(1-(\x))^(10.67)*(\x)^(21.49)});  
\draw[color=qqccqq, smooth,samples=100,domain=8.000000000003847E-7:0.9999990727280006] plot(\x,{2120.93*(1-(\x))^(2.67)*(\x)^(9.49)});  
\draw (0.49,4.17) node[anchor=north west] {$g(\theta|D)$};  
\draw (0.89,3.23) node[anchor=north west] {$g(\theta)$};  
\end{tikzpicture}  
\end{document}

решение1

Рассмотрите также вариант Asymptote, так как он довольно мощный при рисовании графиков, особенно когда есть массив кривых. Пример ниже организует функции в массив; другие свойства, такие как цвет, ширина, метка и т. д., также могут быть организованы в массивы для рисования в одном цикле. Кроме того, -координата yметки вычисляется как точка на кривой. asy-plot.tex

\documentclass{standalone}
\usepackage{lmodern}
\usepackage[inline]{asymptote}
\begin{document}  
\begin{asy}
import graph;
size(250,170,IgnoreAspect);
real xMin=8.000000000003847e-7;
real xMax=0.9999990727280006;
int n=100;

typedef real Func(real x);

Func[] f={
   new real(real x){return 3682570000*(1-x)^(10.67)*x^(21.49);},
   new real(real x){return 2120.93*(1-x)^2.67*x^9.49;},
};

pen dashed=linetype(new real[] {4,3}); // set up dashed pattern

pen[] curvePen={rgb(0,0.8,0)+dashed,rgb(0,0.2,0.8),};
real[] curveWidth={1.6pt,2pt};
Label[] lab={
  Label("$g(\theta\,\vert D)$",(0.6,f[0](0.6))),
  Label("$g(\theta)$",(0.9,f[1](0.9))),
};

for(int i=0;i<f.length;++i){
  draw(graph(f[i], xMin ,xMax ,n),curvePen[i]+curveWidth[i]);
  label(lab[i],UnFill(2pt));
}

xaxis("",0,1.049,RightTicks(Step=0.1,step=0.05),EndArrow);
yaxis("",0,5-0.15,LeftTicks(Step=1,step=0.5),EndArrow);
\end{asy}
\end{document}

Чтобы обработать его latexmk, создайте файл latexmkrc:

sub asy {return system("asy '$_[0]'");}
add_cus_dep("asy","eps",0,"asy");
add_cus_dep("asy","pdf",0,"asy");
add_cus_dep("asy","tex",0,"asy");

и запустить latexmk -pdf asy-plot.tex. Результат выглядит так

введите описание изображения здесь

решение2

Не прямой ответ, но я бы использовал pgfplotsдля этого. Возможно, включение fpuбиблиотеки в нужной точке может решить проблему, но вам не нужно рисовать никаких осей и т. д., поэтому я думаю, что это гораздо удобнее.

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows}  
\definecolor{qqccqq}{rgb}{0,0.8,0}
\definecolor{qqttcc}{rgb}{0,0.2,0.8}
\begin{document}  
\begin{tikzpicture}[line cap=round,line join=round]
\begin{axis}[
    axis lines=middle,
    every inner x axis line/.append style={-triangle 45},
    every inner y axis line/.append style={-triangle 45},
    enlargelimits]
\addplot[dash pattern=on 1pt off 1pt,color=qqttcc, smooth,samples=100,domain=8.000000000003847E-7:0.9999990727280006] plot(\x,{3682570000*(1-(\x))^(10.67)*(\x)^(21.49)});  
\addplot[color=qqccqq, smooth,samples=100,domain=8.000000000003847E-7:0.9999990727280006] plot(\x,{2120.93*(1-(\x))^(2.67)*(\x)^(9.49)});  
\node at (axis cs:0.49,4.17) {$g(\theta|D)$};  
\node at (axis cs:0.89,3.23) {$g(\theta)$};  
\end{axis}
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Проблема, связанная с вашим редактированием, заключается в том, что числа становятся слишком маленькими к концу домена. Чтобы показать, что я переключился на логарифмическую ось на оси Y. TeX не может справиться с такой точностью, но библиотека fpuTikZ или pgfplotsпо умолчанию может справиться до некоторой степени и завершается с ошибкой деления на ноль. В противном случае pgfplotsразрешается gnuplotвыполнение директив вне TeX. Пожалуйста, проверьте руководство по pgfplotsТакже вам не нужно определять каждый используемый вами цвет. xcolor — довольно мощный пакет, поэтому вы можете использовать возможности смешивания цветов. Вот минимальный пример без каких-либо настроек осей и т. д., чтобы показать, насколько прост в использовании:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8} % The latest version on CTAN
\begin{document}  
\begin{tikzpicture}
\begin{semilogyaxis}
\addplot[red,smooth,samples=100,domain=0.0:1.0] {(3.1415926535*sin(((x)*3.1415926535)*180/pi))/2};  
\addplot[green!80!black, smooth,samples=100,domain=0.0:1.0] {(x)^1^2*(1-(x))^8*sin(((x)*3.1415926535)*180/pi)*1/(3.44*10^(-7))};  
\addplot[blue!80!green, ultra thick,smooth,samples=100,domain=0.0:1.0] {2.718281828^((-((x)-0.58)^2)/(0.1^2*2))/(abs(0.1)*sqrt(3.1415926535*2))};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Связанный контент