
Следующий код отображает график полярного уравнения 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:4
TiкЗ.
Как нарисовать ось 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
функцию, которая была заимствована из пакета @egreggmp
.Я поместил графику в математический дисплей,
\[ ... \]
чтобы просто отцентрировать ее на странице с хорошим количеством пропусков до и после. Пуристы, возможно, предпочтут использовать окружениеcenter
.Вы увидите, что я использовал
buildcycle
для определенияcommon
области, которую нужно заполнить. Это довольно универсальный макрос для определения таких путей, но когда вы используете его с двумя замкнутыми путями, вам нужно убедиться, что начальная точка каждого пути не находится внутри другого. Вот почему я повернул путьcircle
на 90.