
Мне было интересно, может ли кто-нибудь указать мне самый простой способ нарисовать следующую картинку. Я начал использовать среду осей из пакета pgfplots, как вы можете видеть из моего кода ниже, но затем я застрял.
Я благодарю вас заранее!
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=middle,axis equal,grid=both]
\addplot coordinates{(0,0) (5,5) };
\end{axis}
\end{tikzpicture}
\end{document}
решение1
Я не думаю, что нужно использовать pgfplots
. Я думаю, что вы можете получить желаемый эффект (и это будет немного проще), используя только tikz
.
\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\coordinate (Q) at (0,0);
%% put this first even though you can use opacity.
\coordinate (indifferent/nw) at (-0.5in,0.5in);
\fill[gray,opacity=0.20] (indifferent/nw) rectangle ++ (1in,-1in);
\path (indifferent/nw) ++ (-0.5cm,0.5cm) node[anchor=south east] (indifferent/label) {indifference};
\draw (indifferent/nw) -- (indifferent/label.base east);
\draw[arrows=-Stealth,purple]
(Q) ++ (-2in,0) node [anchor=east,align=center,text width=0.75in]
{Need not~fulfilled}
--
++ (4in,0) node [anchor=west,align=center,text width=0.75in]
{Need well~fulfilled};
\draw[arrows=-Stealth,purple]
(Q) ++ (0,-2in) node [anchor=north,align=center,text width=0.75in]
{dissatisfied}
--
++ (0,4in) node [anchor=south,align=center,text width=0.75in]
{satisfied};
\draw[blue,text=blue]
(Q) ++ (-2in,-2in)
--
++ (4in,4in) node[pos=0.75,anchor=north west] {Performance};
\draw[red,text=red]
(Q) ++ (-2in,0.25cm) .. controls (-0.5cm,0.25cm) and
( 0.5cm,1.00cm)
..
(1.25in,2in)
node[pos=0.95,anchor=south east] {Excitement};
\draw[red,text=red]
(Q) ++ (-1.25in,-2in) .. controls (-0.5cm,-1.00cm) and
( 0.5cm,-0.45cm)
..
(2in,-0.5cm)
node[pos=0.80,anchor=north west] {Basic};
\end{tikzpicture}
\end{document}
Основная идея здесь заключается в том, что \draw
команды на самом деле являются своего рода путем, и node
s могут быть определены вдоль этих путей. В частности, мы можем указать положение узла, используя pos=<val>
в необязательном аргументе узла. Привязка помогает разместить текст относительно того места, где мы хотим. text width
в сочетании с align
помогает заставить метки вдоль x
оси -переноситься и центрироваться (я использовал ~
и well
для fulfilled
приклеивания). Наконец, цвет текста также можно указать, используя text=<color>
в необязательных аргументах. Наконец, я использовал .. controls (<coordinate>) and (<coordinate>) ..
для построения кривых. Теперь мне приходит в голову, что я должен был попытаться сделать их немного более асимптотическими вдольпроизводительность, но я позволю вам это подправить.
решение2
Для такого рода полутехнического наброска вы можете рассмотретьМетапосткак альтернативный инструмент. Здесь я следовал своей предпочитаемой последовательности, чтобы все было хорошо организовано: определил пути (относительно друг друга, насколько это возможно); нарисовал их; затем добавил метки.
prologues := 3;
outputtemplate := "%j%c.eps";
beginfig(1);
% set a unit scale
u := 1cm;
% define the various paths
path fulfillment, satisfaction, indifference, performance, excitement, basic;
indifference = unitsquare shifted -(1/2,1/2) scaled 2u;
fulfillment = (left--right) scaled 3u;
satisfaction = fulfillment rotated 90;
performance = (xpart point 0 of fulfillment, ypart point 0 of satisfaction)
-- (xpart point 1 of fulfillment, ypart point 1 of satisfaction);
excitement = point 0 of fulfillment shifted (0,1/3u)
{direction 0 of fulfillment} ..
{direction 1 of performance}
point 1 of performance shifted (-1/3u,0);
basic = excitement rotated 180;
% draw the paths
fill indifference withcolor .9 white;
drawarrow fulfillment withcolor .5 white;
drawarrow satisfaction withcolor .5 white;
draw performance withcolor .67 blue;
draw excitement withcolor .67 red;
draw basic withcolor .67 green;
% do the labels
verbatimtex
\font\ss=phvr8r\ss
\def\s#1{$\vcenter{\halign{\hfil{##}\hfil\cr#1\crcr}}$}\let\\\cr
etex
label(btex \s{satisfied} etex, point 1 of satisfaction shifted 10 up);
label(btex \s{dissatisfied} etex, point 0 of satisfaction shifted 10 down);
label(btex \s{needs not\\fulfilled} etex, point 0 of fulfillment shifted 28 left);
label(btex \s{needs well\\fulfilled} etex, point 1 of fulfillment shifted 28 right);
z1 = point 3 of indifference shifted (-u/2,u/2); draw point 3 of indifference -- z1 withcolor .9 white;
label.lft(btex \s{indifference} etex, z1 + 3 up) withcolor .7 white;
label.ulft(btex \s{excitement} etex, point .9 of excitement) withcolor .67 red;
label.lrt (btex \s{performance} etex, point .8 of performance) withcolor .67 blue;
label.lrt (btex \s{basic} etex, point .2 of basic) withcolor .67 green;
endfig;
end.
Примечания
По ссылке выше показаны различные подходы к интеграции MP в ваш рабочий процесс, а также ссылки на руководства.
Я использовал довольно длинные названия для всех путей, чтобы вам было легче следить за тем, что делается.
Вы можете изменить масштаб рисунка, отрегулировав значение
u
вверху.Прямые пути имеют только один сегмент, как и
point 0
начало, иpoint 1
конец.Я определил
satisfaction
как копию,fulfillment
повернутую на 90 градусов по часовой стрелке, иbasic
как копию,excitement
повернутую на 180 градусов. Это делает диаграмму красивой и симметричной.Я определил несколько очень простых простых команд TeX, чтобы позволить мне аккуратно устанавливать метки. Вы также можете использовать LaTeX, как описано в руководстве. Действительно, с пакетом
gmp
, или сluatex
илиcontext
вы можете включить код MP как часть вашего исходного файла LaTeX, как TikZ.