
Me preguntaba si alguien puede indicarme la forma más sencilla de dibujar la siguiente imagen. Comencé a usar el entorno de eje del paquete pgfplots como puede ver en mi código a continuación, pero luego me quedé atascado.
¡Os doy las gracias de antemano!
\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}
Respuesta1
No creo que sea necesario su uso pgfplots
. Creo que puedes conseguir el efecto que deseas (y algo más fácil) usando solo 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}
La idea básica aquí es que \draw
los comandos son en realidad una especie de ruta y node
se pueden definir a lo largo de esas rutas. En particular, podemos especificar la posición de un nodo utilizando pos=<val>
el argumento opcional del nodo. El anclaje ayuda a colocar el texto en relación con donde lo queremos. text width
en combinación con align
ayuda a que las etiquetas a lo largo del x
eje se envuelvan y se centren (yo solía ~
juntarlas well
y fulfilled
pegarlas). Finalmente, el color del texto también se puede especificar usando text=<color>
los argumentos opcionales. Finalmente, usé.. controls (<coordinate>) and (<coordinate>) ..
construir las curvas. Ahora se me ocurre que debería haber intentado hacerlos un poco más asintóticosactuación, pero te dejo modificar eso.
Respuesta2
Para este tipo de boceto semitécnico podrías considerarMetapostcomo herramienta alternativa. Aquí he seguido mi secuencia preferida para mantener todo bien organizado: definir las rutas (entre sí en la medida de lo posible); Dibújalos; luego agregue las etiquetas.
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.
Notas
El enlace anterior muestra varios enfoques para integrar MP en su flujo de trabajo y tiene enlaces a los manuales.
He usado nombres bastante largos para todas las rutas para que puedas seguir lo que se estaba haciendo más fácilmente.
Puede cambiar la escala del dibujo ajustando el valor de
u
en la parte superior.Los caminos rectos tienen un solo segmento, así
point 0
es el principio ypoint 1
el final.Lo he definido
satisfaction
como una copiafulfillment
girada 90 grados en el sentido de las agujas del reloj ybasic
como una copiaexcitement
girada 180. Esto hace que el diagrama sea bonito y simétrico.He definido algunos comandos TeX simples y muy simples que me permiten configurar las etiquetas de manera ordenada. También puedes usar LaTeX, como se explica en el manual. De hecho, con el
gmp
paquete, o conluatex
ocontext
puedes incluir código MP como parte de tu archivo fuente LaTeX, como TikZ.