Code

Code

Der folgende Code zeigt die Grafik der Polargleichung r(\theta) = 4 - 2*sin(\theta). Ich habe den Bereich, der durch diese Kurve begrenzt wird, schattiert. Ich möchte, dass nur der Bereich, der durch diese Kurve und den Kreis mit Mittelpunkt 0 und Radius 3 begrenzt wird, schattiert wird.

Der Radius der Polarachse beträgt 7. Das habe ich nicht angegeben. Ist der Standardwert um eins größer als der maximale Radius des Diagramms? Wie bekomme ich den Radius der Polarachse auf 8?

Ich habe die Abmessungen des Diagramms nicht angegeben. Es ist größer, als ich möchte. Wie kann ich es auf zwei Drittel der aktuellen Anzeigegröße bringen? Können die Abmessungen durch Angabe der Anzahl Zentimeter oder Zoll für Höhe und Breite angegeben werden?

Warum wird dort ein kleiner schwarzer Bogen – vielleicht zwischen –5 Grad und 5 Grad – mit einem Radius von etwas mehr als 4 gezeichnet?

    \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}

Antwort1

Es gibt so viele kleinere Fragen. Sagen Sie mir, wenn ein Teil dieser Antwort unklar ist.

Ich möchte, dass nur der Bereich schattiert wird, der durch diese Kurve und den Kreis mit Mittelpunkt 0 und Radius 3 begrenzt wird.

Siehe den Code am Ende. Im Wesentlichen können Sie entweder \clipeine neue Funktion zeichnen odermin(4-2*sin(\x),3)

Ist der Standardwert um eins größer als der maximale Radius des Graphen?

Niemand weiß es wirklich. Die Bestimmung der Achsengrenze ist seit langem ein Rätsel von pgfplots.

Wie erreiche ich, dass der Radius der Polarachse 8 beträgt?

Beantwortet von @Bobyandbob im Kommentar. (Dies ist vielleicht die am wenigsten erbärmliche Art, die Achsenbegrenzung zu steuern.)

Können die Maße durch Angabe der Zentimeter- oder Zoll-Anzahl für Höhe und Breite präzisiert werden?

Verwenden Sie \begin{polaraxis}[width=5cm]den gewünschten Wert.

Warum wird dort ein kleiner schwarzer Bogen – vielleicht zwischen –5 Grad und 5 Grad – mit einem Radius von etwas mehr als 4 gezeichnet?

Denn \addplot[black] {4.05};in Ihrem MWE. Denken Sie daran, dass der Standardwert in Ti domainist-4:4kZ.

Wie kann ich die x-Achse und die y-Achse zeichnen?

Streng genommen polaraxisgibt es in nur eine r-Achse und eine θ-Achse. Um die normale x-Achse zu zeichnen, verwenden Sie \draw[->]. (Siehe den Code unten.) Die Beschriftungen auf der x-Achse können mit etwas wie gezeichnet werden\draw foreach\x in{-10,...,10}{(0,\x)node[lower right]{x}};

Ich wollte zwei konzentrische Kreise mit den Radien 8 und 8,05, um die Ausdehnung der angezeigten „Polarebene“ anzuzeigen. Der Kreis mit dem Radius 8 wird mit dem kleinen x-Tick num=2 gezeichnet. Wie kann ich einen Kreis mit dem Radius 8,05 oder 8,1 mit demselben Grauton zeichnen?

Dies kann durch Ti erfolgenkZ's . Sie können es mit und doublesteuern . (Siehe den Code unten.)line widthdouble distance

Code

\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}

Antwort2

Während Sie auf Unterstützung warten pgfplots, hier eine Alternative mitMetaposteingewickelt inluamplib. Sie müssen alles selbst zeichnen, aber Sie können es genau so gestalten, wie Sie möchten. Bildbeschreibung hier eingeben

\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}

Anmerkungen

  • Mit luamplibkönnen Sie auf LaTeX-Variablen zugreifen, beispielsweise \textwidthmithilfe der \mpdimFunktion, die aus dem Paket von @egreg übernommen wurde gmp.

  • Ich habe die Grafik in eine mathematische Anzeige eingefügt, \[ ... \]um sie einfach auf der Seite zu zentrieren und einen schönen Abstand davor und danach zu schaffen. Puristen bevorzugen vielleicht die Verwendung einer centerUmgebung.

  • Sie werden sehen, dass ich verwendet habe, buildcycleum den commonauszufüllenden Bereich zu definieren. Dies ist ein ziemlich allgemeines Makro zum Definieren von Pfaden wie diesem, aber wenn Sie es mit zwei geschlossenen Pfaden verwenden, müssen Sie sicherstellen, dass der Startpunkt jedes Pfades nicht innerhalb des anderen liegt. Deshalb habe ich den circlePfad um 90 gedreht.

verwandte Informationen