код

код

Следующий код отображает график полярного уравнения r(\theta) = 4 - 2*sin(\theta). У меня заштрихована область, ограниченная этой кривой. Я хочу, чтобы заштрихована была только область, ограниченная этой кривой, и окружность с центром в точке 0 и радиусом 3.

Радиус полярной оси равен 7. Я этого не указал. Значение по умолчанию на единицу больше максимального радиуса графика? Как сделать радиус полярной оси равным 8?

Я не указал размеры участка. Он больше, чем мне нужно. Как сделать так, чтобы он был в две трети от текущего размера отображения? Можно ли указать размеры, указав количество сантиметров или дюймов для высоты и ширины?

Почему нарисована небольшая черная дуга — может быть, между -5 и 5 градусами, радиус которой немного больше 4?

    \documentclass{amsart}
    \usepackage{amsmath}

    \usepackage{tikz}

    \usepackage{pgfplots}
    \usepgfplotslibrary{polar}
    \pgfplotsset{compat=1.11}


    \begin{document}


    \begin{tikzpicture}
    \begin{polaraxis}[
        clip=false, major grid style={black}, minor x tick num=3, % 3 minor x ticks between majors
        minor y tick num=2, % 2 minor y ticks between majors
        grid=both,
        xtick={0,45,...,315},
        xticklabels={, $\frac{\pi}{4}$, , $\frac{3\pi}{4}$, , $\frac{5\pi}{4}$, , $\frac{7\pi}{4}$},
        ytick={0,3,6},
        yticklabels={\empty}
    ]
      \addplot[samples=360, mark=none, fill=red!70!black, opacity=0.5, domain=0:360] {4 - 2*sin(\x)};
      \addplot[samples=360, mark=none, thick, red!70!black, domain=0:360] {4 - 2*sin(\x)};

\addplot[samples=360, draw=red, thick, mark=none, domain=0:360] {3};

      \addplot[black] {4.05};
    \end{polaraxis}

    \end{tikzpicture}

    \end{document}

решение1

Так много мелких вопросов. Сообщите мне, если какая-то часть ответа непонятна.

Я хочу, чтобы была затенена только область, ограниченная этой кривой и окружностью с центром в точке 0 и радиусом 3.

Смотрите код в конце. По сути вы можете либо \clipпостроить новую функциюmin(4-2*sin(\x),3)

Значение по умолчанию на единицу больше максимального радиуса графика?

Никто на самом деле не знает. Определение предела оси — давняя загадка pgfplots.

Как сделать так, чтобы радиус полярной оси был равен 8?

Ответил @Bobyandbob в комментарии. (Это, пожалуй, наименее жалкий способ контролировать ограничение оси.)

Можно ли указать размеры, указав количество сантиметров или дюймов для высоты и ширины?

Используйте \begin{polaraxis}[width=5cm]любое значение по вашему желанию.

Почему нарисована небольшая черная дуга — может быть, между -5 и 5 градусами, радиус которой немного больше 4?

Потому что \addplot[black] {4.05};в вашем MWE. Помните, что по умолчанию domainв -4:4TiкЗ.

Как нарисовать ось x и ось y?

Строго говоря, в polaraxisесть только ось r и ось θ. Чтобы нарисовать обычную ось x, используйте \draw[->]. (См. код ниже.) Метки на оси x можно нарисовать чем-то вроде\draw foreach\x in{-10,...,10}{(0,\x)node[lower right]{x}};

Мне нужны были две концентрические окружности радиусами 8 и 8.05, чтобы обозначить протяженность отображаемой "полярной плоскости". Окружность радиусом 8 нарисована с minor x tick num=2. Как мне нарисовать окружность радиусом 8.05 или 8.1 с тем же оттенком серого?

Это может сделать ТикZ's double. Вы можете управлять им с помощью line widthи double distance. (См. код ниже.)

код

\documentclass{article}

\usepackage{pgfplots}
    \usepgfplotslibrary{polar}
    \pgfplotsset{compat=1.14}

\begin{document}
    \begin{tikzpicture}
        \begin{polaraxis}[
            width=5cm,
            clip=false,
            x axis line style={double=lightgray,double distance=1pt},
            grid=both,
            major grid style=black,
            minor x tick num=3, % 3 minor x ticks between majors
            minor y tick num=2, % 2 minor y ticks between majors
            xtick={0,45,...,315},
            xticklabels={,$\frac{\pi}4$,,$\frac{3\pi}4$,,$\frac{5\pi}4$,,$\frac{7\pi}4$},
            %y tick style={draw=none},
            yticklabel=\empty,
            domain=0:360,
            samples=360,
            mark=none
        ]
            \addplot[draw=red,thick]{3};
            \addplot[thick,fill=none,draw=red!70!black]{4-2*sin(\x)};
            \addplot[thick,fill=red!70!black,draw=none,opacity=0.5]{min(4-2*sin(\x),3)};
            \draw[->](0,-10)--(0,10);
            \draw[->](90,-10)--(90,10);
        \end{polaraxis}
    \end{tikzpicture}
\end{document}

решение2

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

\documentclass{amsart}
\usepackage{luamplib}
\mplibtextextlabel{enable}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\[
\begin{mplibcode}
beginfig(1);
    % set a unit so that 16u is 2/3 of the text width
    numeric u;
    16u = 2/3 \mpdim\textwidth;

    % define some paths
    path curve, circle, common; 
    curve = (for t=0 upto 359: (4-2*sind(t)) * dir t -- endfor cycle) scaled u;
    circle = fullcircle rotated 90 scaled 6u;
    common = buildcycle(curve, circle);

    % fill the common area first
    fill common withcolor 7/8[3/4 red,white];

    % now make the grey parts of the polar grid
    drawoptions(withpen pencircle scaled 1/4 withcolor 3/4 white);
    for t=0 step 45/4 until 359:
        draw ((4,0) -- (8u,0)) rotated t;
    endfor
    for r=1 upto 7:
        draw fullcircle scaled (2r*u);
    endfor

    % and the black parts of the polar grid
    drawoptions(withpen pencircle scaled 1/4);
    for t=0 step 45 until 179:
        draw (left--right) scaled 8.2u rotated t;
    endfor
    % including a double circle on the outside
    draw fullcircle scaled 16u;
    draw fullcircle scaled (16u+2);
    % grid labels
    drawoptions();
    label("$\frac{ \pi}4$", (9u,0) rotated 45);
    label("$\frac{3\pi}4$", (9u,0) rotated (3*45));
    label("$\frac{5\pi}4$", (9u,0) rotated (5*45));
    label("$\frac{7\pi}4$", (9u,0) rotated (7*45));

    % finally draw the curve and the marker circle
    draw curve withcolor 2/3 red;
    draw circle withcolor 2/3 blue;

endfig;
\end{mplibcode}
\]
\lipsum[2]
\end{document}

Примечания

  • С помощью luamplibвы можете получить доступ к переменным LaTeX, например, \textwidthиспользуя \mpdimфункцию, которая была заимствована из пакета @egreg gmp.

  • Я поместил графику в математический дисплей, \[ ... \]чтобы просто отцентрировать ее на странице с хорошим количеством пропусков до и после. Пуристы, возможно, предпочтут использовать окружение center.

  • Вы увидите, что я использовал buildcycleдля определения commonобласти, которую нужно заполнить. Это довольно универсальный макрос для определения таких путей, но когда вы используете его с двумя замкнутыми путями, вам нужно убедиться, что начальная точка каждого пути не находится внутри другого. Вот почему я повернул путь circleна 90.

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