It is a complex problem and unfortunately it has a complex solution. Let's proceed.
Why amplitude
setting has no effect. This setting is only used for "manual" connections using style simple connection bar
, and in this case you have to specify also the initial and final radii (see p.385 of the manual). When you use instead the mindmap
style for the whole tree, a special to path
is installed which automatically computes the initial and final radii, and the amplitude. You can only specify angles.
The solution for this problem is to write a variant of the code which computes the radii and amplitude, making them to return a bigger value. But then we have to "install" this code in some way for the mindmap
style to use it.
If we modify the code which installs the to path
, the change is global for all the mindmap, so we would get all the connections "thick". Even if we install the new to path
only for the first level, its effect is global because it applies also to all child levels from the level in which it is installed. So we need to install the code for the first level and uninstall it for subsequent levels.
In order to get shaded connections which fade from the parent color to the child color, tikz uses a special trick. When you set a concept color
, the library sets the color of that (child) node, and also installs a code to draw a path from its parent using the style circle connection bar switch color
. This style requires one parameter, which is the color of the child node. If we want to install a new code which draws the connection more thick, we have to install it at this point. Thus, this does not depend on the level, but on the use of the key concept color
which can happen at any level.
To solve all above problems I devised a solution. It is admittedly ugly and cumbersome but it works, and it is the best I coul do. There is it:
1. New macros to compute the radii and amplitude which produce bigger results
Taken the code from tikzlibrarymindmap.code.tex
, I wrote the following macros, whose name ends in @b
to differentiate them from the original ones. The code is identical except for the numbers 1.6
and .35
which originally were 1.0
and .175
. The new values are somewhat arbitrary. You can play with other values to get the look you like the most.
\def\tikz@compute@circle@radii@b{%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztostart}{center}}}%
\pgf@xa=\pgf@x%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztostart}{west}}}%
\advance\pgf@xa by-\pgf@x%
\pgf@xa=1.6\pgf@xa\relax% <<<----- here
\pgfkeys{/pgf/decoration/start radius/.expanded=\the\pgf@xa}%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztotarget}{center}}}%
\pgf@xa=\pgf@x%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztotarget}{west}}}%
\advance\pgf@xa by-\pgf@x%
\pgf@xa=1.6\pgf@xa\relax% <<<----- and here
\pgfkeys{/pgf/decoration/end radius/.expanded=\the\pgf@xa}%
}
\def\tikz@compute@segmentamplitude@b{%
\pgf@x=\pgfkeysvalueof{/pgf/decoration/start radius}\relax%
\ifdim\pgf@x>\pgfkeysvalueof{/pgf/decoration/end radius}\relax%
\pgf@x=\pgfkeysvalueof{/pgf/decoration/end radius}\relax%
\fi%
\pgf@x=.35\pgf@x\relax% <<<----- here
\edef\pgfdecorationsegmentamplitude{\the\pgf@x}%
}
2. New styles which "install" and "uninstall" the above macros as part of the computation of the edges.
I define the following two styles, to be used in place of concept color
. You have to use thick bar concept color
for children which have to be connected with their parent via a thick bar, and standard bar concept color
for children which are connected with their parent via a standard thickness bar. Internally these styles redefine the macros used to compute the radii and amplitude, and make the to
connection. They are based in style concept color
defined in tikzlibrarymindmap.code.tex
.
\tikzoption{thick bar concept color}{%
\let\tikz@old@concept@color=\tikz@concept@color%
\let\tikz@old@compute@circle@radii=\tikz@compute@circle@radii%
\let\tikz@compute@circle@radii=\tikz@compute@circle@radii@b%
\let\tikz@old@compute@segmentamplitude=\tikz@compute@segmentamplitude%
\let\tikz@compute@segmentamplitude=\tikz@compute@segmentamplitude@b%
\def\tikz@edge@to@parent@path{
(\tikzparentnode)
to[circle connection bar switch color=from (\tikz@old@concept@color) to (#1)]
(\tikzchildnode)}
\def\tikz@concept@color{#1}%
}
\tikzoption{standard bar concept color}{%
\let\tikz@old@concept@color=\tikz@concept@color%
\let\tikz@compute@circle@radii=\tikz@old@compute@circle@radii%
\let\tikz@compute@segmentamplitude=\tikz@old@compute@segmentamplitude%
\def\tikz@edge@to@parent@path{
(\tikzparentnode)
to[circle connection bar switch color=from (\tikz@old@concept@color) to (#1)]
(\tikzchildnode)}
\def\tikz@concept@color{#1}%
}
3. Use in the mindmap
With the above setup, in your mindmap you have to use thick bar concept color
for all nodes at the first level, and standard bar concept color
for the remaining levels. In your case it is easy, because you have defined specific styles for the different kind of nodes, so you simply need:
[...]
partner/.style={thick bar concept color=blue!80!black},
air force/.style={standard bar concept color=afcolor},
metadata/.style={standard bar concept color=mdcolor},
nmnd/.style={standard bar concept color=nmndcolor},
nmes/.style={standard bar concept color=nmescolor},
cits/.style={standard bar concept color=citscolor},
[...]
4. All together now
This is the full code and the result:
\documentclass[tikz, preview=true, border=2mm]{standalone}
\renewcommand*\familydefault{\sfdefault}
\usepackage{tikz}
\usetikzlibrary{mindmap,trees,shadows}
\begin{document}
\makeatletter
\def\tikz@compute@circle@radii@b{%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztostart}{center}}}%
\pgf@xa=\pgf@x%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztostart}{west}}}%
\advance\pgf@xa by-\pgf@x%
\pgf@xa=1.6\pgf@xa\relax%
\pgfkeys{/pgf/decoration/start radius/.expanded=\the\pgf@xa}%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztotarget}{center}}}%
\pgf@xa=\pgf@x%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztotarget}{west}}}%
\advance\pgf@xa by-\pgf@x%
\pgf@xa=1.6\pgf@xa\relax%
\pgfkeys{/pgf/decoration/end radius/.expanded=\the\pgf@xa}%
}
\def\tikz@compute@segmentamplitude@b{%
\pgf@x=\pgfkeysvalueof{/pgf/decoration/start radius}\relax%
\ifdim\pgf@x>\pgfkeysvalueof{/pgf/decoration/end radius}\relax%
\pgf@x=\pgfkeysvalueof{/pgf/decoration/end radius}\relax%
\fi%
\pgf@x=.35\pgf@x\relax%
\edef\pgfdecorationsegmentamplitude{\the\pgf@x}%
}
\tikzoption{thick bar concept color}{%
\let\tikz@old@concept@color=\tikz@concept@color%
\let\tikz@old@compute@circle@radii=\tikz@compute@circle@radii%
\let\tikz@compute@circle@radii=\tikz@compute@circle@radii@b%
\let\tikz@old@compute@segmentamplitude=\tikz@compute@segmentamplitude%
\let\tikz@compute@segmentamplitude=\tikz@compute@segmentamplitude@b%
\def\tikz@edge@to@parent@path{
(\tikzparentnode)
to[circle connection bar switch color=from (\tikz@old@concept@color) to (#1)]
(\tikzchildnode)}
\def\tikz@concept@color{#1}%
}
\tikzoption{standard bar concept color}{%
\let\tikz@old@concept@color=\tikz@concept@color%
\let\tikz@compute@circle@radii=\tikz@old@compute@circle@radii%
\let\tikz@compute@segmentamplitude=\tikz@old@compute@segmentamplitude%
\def\tikz@edge@to@parent@path{
(\tikzparentnode)
to[circle connection bar switch color=from (\tikz@old@concept@color) to (#1)]
(\tikzchildnode)}
\def\tikz@concept@color{#1}%
}
\makeatother
\begin{tikzpicture}
% Define experience colors
\colorlet{afcolor}{blue!50}
\colorlet{mdcolor}{red!75}
\colorlet{nmndcolor}{orange!80}
\colorlet{nmescolor}{teal!70!green}
\colorlet{citscolor}{violet!75}
\begin{scope}[mindmap,
every node/.style={concept, circular drop shadow, minimum size=0pt,execute at begin node=\hskip0pt, font=\bfseries},
root concept/.append style={
concept color=black, fill=white, line width=1.5ex, text=black, font=\huge\scshape\bfseries,},
level 1 concept/.append style={font=\bfseries},
text=white,
partner/.style={thick bar concept color=blue!80!black},
air force/.style={standard bar concept color=afcolor},
metadata/.style={standard bar concept color=mdcolor},
nmnd/.style={standard bar concept color=nmndcolor},
nmes/.style={standard bar concept color=nmescolor},
cits/.style={standard bar concept color=citscolor},
grow cyclic,
level 1/.append style={level distance=6.2cm,sibling angle=45},
level 2/.append style={level distance=3cm,sibling angle=45},
]
\node [root concept] (team) {Team\\Foo}[rotate=202.5] % root
child [partner] { node {Comp 8}
child [nmes] { node {\small NM/ES} }
}
child [partner] { node {Comp 1}
child [metadata] { node {\small Metadata} }
child [air force] { node {\small Air Force} }
child [nmnd] { node {\small NM/ND} }
child [cits] { node {\small CITS} }
child [nmes] { node {\small NM/ES} }
}
child [partner] { node {Comp 2}
child [metadata] { node {\small Metadata} }
}
child [partner] { node (comp3) {Comp 3}
child [air force] { node {\small Air Force} }
child [nmnd] { node {\small NM/ND} }
child [cits] { node (leftmost) {\small CITS} }
child [nmes] { node {\small NM/ES} }
}
child [partner] { node {Comp 4}
child [air force] { node {\small Air Force} }
child [nmes] { node {\small NM/ES} }
}
child [partner] { node {Comp 5}
child [metadata] { node {\small Metadata} }
child [nmnd] { node {\small NM/ND} }
child [nmes] { node {\small NM/ES} }
}
child [partner] { node {Comp 6}
child [air force] { node {\small Air Force} }
child [nmnd] { node {\small NM/ND} }
child [nmes] { node {\small NM/ES} }
}
child [partner] { node {Comp 7}
child [air force] { node {\small Air Force} }
child [nmnd] { node {\small NM/ND} }
child [nmes] { node {\small NM/ES} }
};
\end{scope}
\begin{scope}[xshift=-4.5cm, yshift=-10.5cm,every node/.style={text=black}]
\matrix[row sep=0pt,column sep=1mm, nodes={anchor=west}] {
\fill [afcolor] (0,.25ex) circle (1ex); & \node{Air Force Experience};\\
\fill [mdcolor] (0,.25ex) circle (1ex); & \node{Metadata Environments Development Experience};\\
\fill [nmndcolor] (0,.25ex) circle (1ex); & \node{Network Management and Network Defense Experience};\\
\fill [nmescolor] (0,.25ex) circle (1ex); & \node{Network Management and Enterprise Services Experience};\\
\fill [citscolor] (0,.25ex) circle (1ex); & \node{CITS Information Transport Systems Experience};\\
};
\end{scope}
\end{tikzpicture}
\end{document}
![Result](https://i.stack.imgur.com/5jLtb.png)
5. A word of caution
All the above is an ugly hack, and modifies macros internally used by tikz, so it will probably break with a newer version of the library. My code was tested with the version which comes with Texlive 2012 (which apparently is v 1.9 2009/11/12
of the file tikzlibrarymindmap.code.tex
).
Your node
(inside the \DrawArrowC
and D
command) is in the wrong position. If you say:
\draw (0,0) -- node{A} (2,0);
By default, the text A
will be placed midway
path (in this case, at (1,0)
) if you put the node after the last coordinate, it will be placed, by default, at the very end of the path, namely at the last input coordinate:
\draw (0,0) -- (2,0) node{A};
In this case A
will be placed at (2,0)
. Another option is to explicitly give the node position through the pos
key, saying
\draw node[pos=1]{A} (0,0) -- (2,0);
Where 1
is the end of the path and 0
the start. That will place the node at the path's very end coordinate (an alias for that is the key at end
). So, if you explicitly give the pos
(or one of its aliases midway
, at start
and at end
) key to the node it will be placed wherever that pos
key leads to.
As in regard to you question of how it looks, is certainly a question of opinion. In my own opition, doing this with TikZ is ruining the table, make a row and put the sums in it, that'd look much better.
In regard to the presented code, I do not understand why you make so much \DrawArrowX
commands, they are the same commands with some little things changed. You can achieve the same result with only one \DrawArrow
and extense use of TikZ styles, then you needn't remember which \DrawArrowX
is which and you have even more flexibility, since you can change the styles mid document. Darn, you can even make styles called A
, B
and whatever that modify the arr
style so you don't have several \DrawArrowX
commands. Here is an example of how it can be done:
\documentclass{article}
\usepackage{booktabs}
\usepackage{tikz}
\usetikzlibrary{tikzmark,arrows.meta,patterns,calc}
%\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\DrawBox}[4][]{%
\tikz[overlay,remember picture]{%
\coordinate (TopLeft) at ($(pic cs:#2)+(-0.2em,0.9em)$);
\coordinate (BottomRight) at ($(pic cs:#3)+(0.2em,-0.3em)$);
%
\path (TopLeft); \pgfgetlastxy{\XCoord}{\IgnoreCoord};
\path (BottomRight); \pgfgetlastxy{\IgnoreCoord}{\YCoord};
\coordinate (LabelPoint) at ($(\XCoord,\YCoord)!0.5!(BottomRight)$);
%
\draw [red,#1] (TopLeft) rectangle (BottomRight);
\node [below, #1, fill=none, fill opacity=1] at (LabelPoint) {#4};
}
}
\tikzset{arr draw/.style={draw=gray,line width=2pt,-latex},
arr to/.style={out=-50,in=-150},
arr node/.style={below=1mm, inner sep=1pt}}
\newcommand\DrawArrow[4][]{
\begin{tikzpicture}[remember picture,overlay, #1]
\draw[arr draw] (pic cs:#2) to[arr to] (pic cs:#3) node[arr node] {#4};
\end{tikzpicture}
}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Issue 2}
\begin{tabular}{@{}rrrrrrr@{}}
\toprule
& \multicolumn{6}{c}{Development year} \\
\cmidrule(l){2-7}
{Year} & {1} & {2} & {3} & {4} & {5} & {6} \\
\midrule
2009 & \tikzmark{lefta}443 & \tikzmark{leftb}1,136 & 2,128 & 2,898 & 3,403 & 3,873 \\
2009 & 443 & 1,136 & 2,128 & 2,898 & 3,403 & 3,873 \\
2010 & 396 & 1,333 & 2,181 & 2,986 & 3,692 & \\
2011 & 441 & 1,288 & 2,420 & 3,483 & & \\
2012 & 359 & 1,421 & 2,864 & & & \\
2013 & 377\tikzmark{righta} & 1,363\tikzmark{rightb} & & & & \\
2014 & 344& - & - & - & - & - \\
&\phantom{377}\tikzmark{line1end}&\phantom{1,363}\tikzmark{line2end}&&&&\\
\end{tabular}%
\DrawBox[thick, black]{lefta}{righta}{}
\DrawBox[thick, black]{leftb}{rightb}{}
% You can change the all the "arr's" styles globally by using \tikzset
% in the middle of the document, then all \DrawArrow commands will follow such style
% or locally through the optional argument of \DrawArrow, then just that command will follow that sytle.
\DrawArrow[arr to/.style={bend left}, arr draw/.style={->}, arr node/.style={left, font=\tiny}]{righta}{line1end}{Sum=2,016}
\DrawArrow{rightb}{line2end}{Sum=6,542}
\label{tab:first two col sums}
\end{table}%
\end{document}
Best Answer