
Я хотел бы нарисовать смесь двух диаграмм. Вот мой код для начала координат:
\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);