Экспоненциальная форма отметок для логарифмического участка в Mathematica - PullRequest
13 голосов
/ 22 октября 2011

В попытке узнать больше о Mathematica, я пытаюсь воспроизвести отметки на этом log (log) графике : enter image description here

Это так близко, как я могу получить:

LogLogPlot[Log[x!], {x, 1, 10^5}, PlotRange -> {{0, 10^5}, {10^-1, 10^6}}, Ticks -> {Table[10^i, {i, 0, 5}], Table[10^i, {i, -1, 6}]}]

enter image description here

Вопрос

Как сделать отметки, которые всегда имеют форму 10 ^ n для соответствующих значений n?

Ответы [ 4 ]

13 голосов
/ 22 октября 2011

Superscript, универсальная форма набора без какого-либо встроенного значения, ваш друг для этого.

LogLogPlot[Log[x!], {x, 1, 10^5}, 
   PlotRange -> {{0, 10^5}, {10^-1, 10^6}}, 
   Ticks -> {
       Table[{10^i, Superscript[10, i]}, {i, 0, 5}], 
       Table[{10^i, Superscript[10, i]}, {i, -1, 6}]
       }
   ]
4 голосов
/ 22 октября 2011

Чтобы расширить предыдущие ответы, вы можете автоматически рассчитать правильный диапазон для Table s в опции Ticks, выполнив что-то вроде

ticksfun[xmin_, xmax_] := 
 Table[{10^i, Superscript[10, i]}, {i, Floor[Log10[xmin]], 
   Ceiling[Log10[xmax]]}]

LogLogPlot[Log[x!], {x, 1, 10^5}, 
 PlotRange -> {{0, 10^5}, {10^-1, 10^6}}, 
 Ticks -> {ticksfun, ticksfun}]
3 голосов
/ 22 октября 2011

LevelScheme - пакет для Mathematica, который делает создание таких графиков очень простым, полностью настраиваемым и профессиональным.Я очень уверен, что если ваш сюжет был сделан в Mathematica, он использовал LevelScheme.Вот мое воспроизведение вашего сюжета в Mathematica с использованием LevelScheme

<<LevelScheme`;
Figure[{
    FigurePanel[{{0,1},{0,1}},
            PlotRange->{{0,5},{-1,6}},
            FrameTicks->{
                        LogTicks[0,5,ShowMinorTicks->False],
                        LogTicks[-1,6,ShowMinorTicks->False]
                    }
    ],
    RawGraphics[
        LogLogPlot[{Log[x!],x Log[x]-x},{x,1,10^5},
                PlotRange->{{0,10^5},{10^-1,10^6}},
                PlotStyle->Darker/@{Red,Green}
            ]
    ]
}, PlotRange->{{-0.1,1.04},{-0.05,1.025}},ImageSize->300{1,1}]

enter image description here

2 голосов
/ 22 октября 2011

Вы можете указать метку для данного тика, дав 2-кортеж {value, label} вместо простого value.

Это все еще оставляет нам загадку, как поддерживать форму 10^n. Для этого мы отмечаем, что использование Defer заставляет 10^i сохранять свою форму. Однако нам все еще нужно Evaluate i внутри него, так как в противном случае мы просто получим кучу 10^i -меток.

Пример:

In[19]:= Table[10^i, {i, 0, 6}]

Out[19]= {1, 10, 100, 1000, 10000, 100000, 1000000}

In[18]:= Table[10^Defer[i], {i, 0, 6}]

Out[18]= {10^i, 10^i, 10^i, 10^i, 10^i, 10^i, 10^i}

In[17]:= Table[10^Defer[Evaluate[i]], {i, 0, 6}]

Out[17]= {10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6}

Используя это, теперь мы можем сделать следующее, чтобы получить решение:

LogLogPlot[Log[x!], {x, 1, 10^5}, 
 PlotRange -> {{0, 10^5}, {10^-1, 10^6}}, 
 Ticks -> {Table[{10^i, 10^Defer[Evaluate [i]]}, {i, 0, 5}], 
   Table[{10^i, 10^Defer[Evaluate [i]]}, {i, -1, 6}]}, 
 TicksStyle -> StandardForm]
...