Превращение концентрических овалов в концентрические круги с помощью прямоугольной заплатки

Превращение концентрических овалов в концентрические круги с помощью прямоугольной заплатки

Я хотел бы нарисовать смесь двух диаграмм. Вот мой код для начала координат:

\documentclass{article}

\usepackage{pgfplots}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tkz-euclide}
%\pgfplotsset{compat=newest} %<------ Here
\pgfplotsset{compat=1.11} %<------ Or use this one

\begin{document}

\begin{center}
\begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]
\begin{axis}[xtick={-5,-4,-3,-2,-1,0,1,2,3,4,5}, ytick={-5,-4,-3,-2,-1,0,1,2,3,4,5},
xmin=-5, xmax=5, ymin=-5, ymax=5, grid=major,
xlabel={Galactic longitude $\ell$ in degree},
ylabel={Galactic latitude $b$ in degree},
axis lines = left,
axis line style={->}]

 % rectangle
 \draw[blue] (0,0) circle[radius=1];
 \draw[blue] (0,0) circle[radius=2];
 \draw[blue] (0,0) circle[radius=3];
 \draw[blue] (0,0) circle[radius=4];
 \draw[blue] (0,0) circle[radius=5];
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}

Я пытаюсь нарисовать концентрические круги, но в итоге получились овалы. Хотелось бы узнать, как это можно исправить?

Вот вторая проблема, я хотел бы разместить прямоугольную заплатку после изображения:

Прямоугольная заплатка.

Я борюсь с этими двумя: превращаю овалы в круги и помещаю поверх них прямоугольную заплатку.

решение1

Вы можете использовать следующее:

\documentclass[tikz, border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}

\begin{tikzpicture}[scale=1.5]
  \begin{axis}[
    xmin=-5, xmax=5, ymin=-5, ymax=5, grid=major,
    xtick={-5,...,5}, ytick={-5,...,5},
    unit vector ratio = 1 1,
    xlabel={Galactic longitude $\ell$ in degree},
    ylabel={Galactic latitude $b$ in degree},
    axis lines = left,
    axis line style={->},
    clip=false]

   \pgfplotsinvokeforeach {1,...,5} {
     \draw[blue] (0,0) circle[radius=#1];
   }
   \draw[green, thick, fill=white] (-5,-0.5) rectangle (5,0.5);
  \end{axis}
\end{tikzpicture}

\end{document}

Скриншот

Примечания:

  • не передавайте несколько необязательных аргументов tikzpicture( \begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]это неверно, лучше использовать что-то вроде \begin{tikzpicture}[scale=1.5, x=1cm,y=1cm]);

  • pgfplotsУровень совместимости 1.11 немного устарел, я повысил его до 1.16. \pgfplotsset{compat=newest}Может быть, это нормально, когда вы активно работаете над сюжетом и собираетесь исправить все проблемы, нозатемлучше жестко закодировать версию, чтобы гарантировать, что ваш график не будет молча выдавать другой результат в будущем при его перекомпиляции.
    По сути, это \pgfplotsset{compat=1.16}означает: «Я проверил, что этот график отлично работает с pgfplotsуровнем совместимости 1.16, я хочу иметь то же поведение каждый раз при перекомпиляции. Только когда я буду готов исправить потенциальные проблемы, вызванные изменениями, pgfplotsя перейду на более новый уровень совместимости (когда выйдут более свежие версии pgfplots— 1.16 является последней на данный момент)».

  • \pgfplotsinvokeforeachДля рисования кругов я использовала петлю;

  • Я нарисовал прямоугольник, используя неявную axis csсистему координат (неявную с уровня совместимости 1.11);

  • Я нарисовала его после кругов, чтобы убедиться, что его заливка покрывает круги и сетку;

  • Я использовал опцию unit vector ratio = 1 1, чтобы убедиться, что единицы измерения на каждой оси имеют одинаковую длину (это делает круги настоящими кругами, а не эллипсами).

  • clip=falseгарантирует, что левая и правая стороны зеленого прямоугольника не будут обрезаны (в противном случае будет обрезана половина ширины линии — попробуйте).

Для рисования прямоугольного участка можно использовать другую систему координат, это rel axis cs(см.Система координат отн. ось csвpgfplots руководство). В этом случае координаты не будут соответствовать вашим значениям данных; вместо этого диапазон [0,1] будет сопоставлен с диапазонами, охватываемыми каждой из осей графика (Иксиуздесь, но это также работает с 3D-графиками). Другими словами, зеленый прямоугольник можно нарисовать и так:

\draw[green, thick, fill=white]
  (rel axis cs:0,0.45) rectangle (rel axis cs:1,0.55);

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