
El siguiente código muestra la gráfica de la ecuación polar r(\theta) = 4 - 2*sin(\theta)
. Tengo la región delimitada por esta curva sombreada. Quiero que solo se sombreen la región delimitada por esta curva y el círculo centrado en 0 con radio 3.
El radio del eje polar es 7. No especifiqué esto. ¿El valor predeterminado es uno más que el radio máximo del gráfico? ¿Cómo consigo que el radio del eje polar sea 8?
No especifiqué las dimensiones de la trama. Es más grande de lo que quiero. ¿Cómo consigo que sea dos tercios del tamaño de visualización actual? ¿Se pueden especificar las dimensiones especificando el número de centímetros o pulgadas para el alto y el ancho?
¿Por qué hay un pequeño arco negro, tal vez entre -5 grados y 5 grados, dibujado en un radio de poco más de 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}
Respuesta1
Hay tantas preguntas menores. Dígame si alguna parte de esta respuesta no está clara.
Quiero que solo se sombreen la región delimitada por esta curva y el círculo centrado en 0 con radio 3.
Vea el código al final. Básicamente, puedes \clip
trazar una nueva función.min(4-2*sin(\x),3)
¿El valor predeterminado es uno más que el radio máximo del gráfico?
Nadie lo sabe realmente. La determinación del límite del eje es un misterio de larga data de pgfplots.
¿Cómo consigo que el radio del eje polar sea 8?
Respondido por @Bobyandbob en el comentario. (Esta es quizás la forma menos patética de controlar el límite del eje).
¿Se pueden especificar las dimensiones especificando el número de centímetros o pulgadas para el alto y el ancho?
Usa \begin{polaraxis}[width=5cm]
o el valor que quieras.
¿Por qué hay un pequeño arco negro, tal vez entre -5 grados y 5 grados, dibujado en un radio de poco más de 4?
Porque \addplot[black] {4.05};
en tu MWE. Recuerde que el valor predeterminado domain
está -4:4
en TikZ.
¿Cómo puedo dibujar el eje x y el eje y?
Estrictamente hablando, polaraxis
solo hay eje r y eje θ. Para dibujar el eje x habitual, utilice \draw[->]
. (Consulte el código a continuación). Las etiquetas en el eje x se pueden dibujar con algo como\draw foreach\x in{-10,...,10}{(0,\x)node[lower right]{x}};
Quería dos círculos concéntricos de radios 8 y 8,05 para indicar la extensión del "plano polar" mostrado. El círculo con un radio de 8 se dibuja con x menor tick num=2. ¿Cómo puedo dibujar un círculo con un radio de 8,05 u 8,1 con el mismo tono de gris?
Esto lo puede hacer Tikdouble
Las Z. Puedes controlarlo mediante line width
y double distance
. (Consulte el código a continuación).
código
\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}
Respuesta2
Mientras espera pgfplots
ayuda, aquí tiene una alternativa que utilizaMetapostenvuelto enluamplib
. Tienes que dibujarlo todo tú mismo, pero puedes lograr que luzca exactamente como quieres.
\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}
Notas
Con
luamplib
puede acceder a variables de LaTeX, como\textwidth
usar la función, que fue tomada prestada del paquete\mpdim
de @egreg .gmp
Puse el gráfico dentro de una pantalla matemática
\[ ... \]
simplemente para centrarlo en la página con una buena cantidad de saltos antes y después. Los puristas tal vez prefieran utilizar uncenter
entorno.Verás que lo he utilizado
buildcycle
para definir elcommon
área a rellenar. Esta es una macro de propósito bastante general para definir rutas como esta, pero cuando la usas con dos rutas cerradas debes asegurarte de que el punto inicial de cada ruta no esté dentro del otro. Por eso he rotado elcircle
camino 90.