
решение1
Как было сказано в некоторых комментариях, мы хотели бы увидеть ваши собственные попытки здесь, для начала. Однако, поскольку эта диаграмма включает в себя некоторые интересные аспекты, я набросаю путь к вашей окончательной диаграмме. Кстати, это более или менее процедура для создания рисунков.
Где найти больше
Я предлагаю вам просмотреть или прочитать обучающие разделы в руководстве Tikz, либоhtmlизpdf. Также посмотрите все соответствующие команды Tikz, которые я использую.
Основная идея
Давайте сначала рассмотрим основную идею:
- нарисуйте оси
- нарисуйте нижнюю кривую
- укажите точки, необходимые для расстановки точек
- соедините точки над нижней кривой
Топоры: ничего странного в ней... просто нарисуйте их.
% ~~~ axes ~~~
\draw[->] (0,0) -- (5,0);
\draw[->] (0,0) -- (0,5);
Теперь нижняя кривая кажется сложной, хотя это не так, когда вы понимаете концепцию пути Tikz. По сути, вы рисуете линию между двумя точками \draw (1,3) -- (4,1);
. Чтобы сделать ее изогнутой, как один из способов сделать это, просто замените --
на to[out=,in=]
и укажите исходящий и входящий углы. Путь начинается с \draw
и заканчивается на ;
. Так что давайте выполним еще немного действий на этом пути, прежде чем он закончится. Поставьте a node
после последней нарисованной координаты, чтобы поместить метку T1. Вставьте еще два node
s между начальной и конечной точками, где мы будем использовать только их координаты (A) и (B) и точно настроим их положение на этом пути с помощью [pos=]
. Пожалуйста, посмотрите на сброшенный \
внутри пути.
% ~~~ lower curve: a path with many actions ~~~~~
\draw (1,3) to[out=-60,in=170] % start point, towards ...
node[pos=.8] (A) {A} % basically, store coordinates
node[pos=.6] (B) {B} % (A) and (B)
(4,1) node[anchor=west]{$T_1$} % end point + some node as label
; % end of this path
Нам нужна еще одна точка (C) над (B), поэтому давайте поставим еще одну \node
, используя[yshift=]
% ~~~ put a node//coordinate above (B) ~~~
\node (C) at ([yshift=6mm]B) {C};
Наконец, давайте соединим (A), (C) и (B) снова какой-нибудь изогнутой линией:
% ~~~ connect A, C and B ~~~~~~~~~
\draw (A) to[out=140,in=-70] (C) -- (B);
Уточнения
Вот изменения и дополнения:
- определить некоторые стили:
crd
для визуализации фиктивных узлов с кругами,ln
для линии - запомнить
coordinate (X)
по оси x для дальнейшего использования - удалить текст из узлов A, B и C И использовать
crd
стиль - нарисуйте стрелку и метку для
(label)
- вычислить координату (V4) под (B) повторно используя (X),
\node
поставить\draw
галочку
Для shifted arrow
вашей линии есть несколько способов сделать это. Я использовал ленивый вариант, и вот еще варианты:
- опуская стрелку
- использование библиотеки декораций
- поставьте промежуточную точку между А и В (и отрегулируйте углы, если необходимо)
- и т. д.
Полный код
Этот код создаст две страницы (по одной для каждой среды tikzpicture) рисунков с настроенной геометрией страницы.
\documentclass[10pt,border=3mm,tikz]{standalone}
\begin{document}
% ~~~ (I) basic ideas ~~~~~~~~~~~~~~~
\begin{tikzpicture}
% ~~~ axes ~~~
\draw[->] (0,0) -- (5,0);
\draw[->] (0,0) -- (0,5);
% ~~~ lower curve: a path with many actions ~~~~~
\draw (1,3) to[out=-60,in=170] % start point, towards ...
node[pos=.8] (A) {A} % basically, store coordinates
node[pos=.6] (B) {B} % (A) and (B)
(4,1) node[anchor=west]{$T_1$} % end point + some node as label
; % end of this path
% ~~~ put a node//coordinate above (B) ~~~
\node (C) at ([yshift=6mm]B) {C};
% ~~~ connect A, C and B ~~~~~~~~~
\draw (A) to[out=140,in=-70] (C) -- (B);
\end{tikzpicture}
% ~~~ (II) fine print ~~~~~~~~~~~~~~~
\begin{tikzpicture}[ % some self-defined styles
crd/.style={minimum size=1mm, % puts the dots
inner sep=0pt,circle,draw,fill},
ln/.style={blue, line width=1.5pt},
]
% ~~~ axes ~~~
\draw[->] (0,0) -- (5,0) coordinate (X);
\draw[->] (0,0) -- (0,5);
% ~~~ lower curve: a path with many actions ~~~~~
\draw (1,3) to[out=-60,in=170] % start point, towards ...
node[pos=.8,crd] (A) {} % basically, store coordinates
node[pos=.6,crd] (B) {} % (A) and (B)
(4,1) node[anchor=west]{$T_1$} % end point + some node as label
; % end of this path
% ~~~ put a node//coordinate above (B) ~~~
\node[crd] (C) at ([yshift=6mm]B) {};
% ~~~ connect A, C and B ~~~~~~~~~
\draw[ln,->] (A) to[out=140,in=-70] (C);
\draw[ln] (C) -- (B);
% ~~~ put some label ~~~~~~~~~~~
\draw[<-] (C) -- +(45:15mm) node[anchor=west] {$(V_4, P_4, T_4)$};
% ~~~ perpendicular below points ~~~~~~~
\coordinate (V4) at (B |- X); % projection onto x-axis
\node[yshift=-3mm] at (V4) {$V_4$}; % the label
\draw (V4) -- +(0,.2); % the tick
\end{tikzpicture}
\end{document}