\documentclass{article}

\usepackage{bchart}

\frenchspacing

\title{
  \texttt{bchart}: Simple Bar Charts in \LaTeX
  \medskip\\
  \large Version 0.1.2
}
\author{Tobias Kuhn}
\date{22 August 2012}

\begin{document}

\maketitle


\section{Introduction}

\texttt{bchart} is a {\LaTeX} package for drawing simple bar charts with horizontal bars on a numerical x-axis. It is based on the TikZ drawing package. The focus of this package is on simplicity and aesthetics.

To use the package, you have to make sure that {\LaTeX} is able find the file \texttt{bchart.sty}, e.g. by placing a copy of it into the directory of the source file that is using the package. In order to load the package, you have to place the following command at the beginning of your {\LaTeX} source file:
\begin{quote}\small
\begin{verbatim}
\usepackage{bchart}
\end{verbatim}
\end{quote}


\section{Charts}

Charts are created with the \texttt{bchart}-environment. Within this environment, you can put one or more bars by using the \texttt{bcbar}-command. The code of a very simple chart and the resulting picture are shown here:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[max=50]
  \bcbar{45}
  \bcbar{26}
  \bcbar{31}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[max=50]
  \bcbar{45}
  \bcbar{26}
  \bcbar{31}
\end{bchart}
\end{quote}
The option \texttt{max} defines the maximum value on the x-axis (the default is 100). The number given to the \texttt{bcbar}-command defines the value of the respective bar, visualized by the width of the bar and printed as a number to the right of it. The minimum value on the x-axis defaults to 0, but this can be changed by the use of the option \texttt{min}. Furthermore, the option \texttt{step} can be used to show marks at regular intervals:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[min=2.5,step=0.25,max=3.75]
  \bcbar{2.6}
  \bcbar{3.7}
  \bcbar{3.1}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[min=2.5,step=0.25,max=3.75]
  \bcbar{2.6}
  \bcbar{3.7}
  \bcbar{3.1}
\end{bchart}
\end{quote}
For marks at irregular intervals, the \texttt{steps}-option can be used instead:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[min=1,max=18,steps={1,3,7,15}]
  \bcbar{13}
  \bcbar{4}
  \bcbar{7}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[min=1,max=18,steps={1,3,7,15}]
  \bcbar{13}
  \bcbar{4}
  \bcbar{7}
\end{bchart}
\end{quote}
The \texttt{plain}-flag hides all marks:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[max=8,plain]
  \bcbar{6.2}
  \bcbar{1.8}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[max=8,plain]
  \bcbar{6.2}
  \bcbar{1.8}
\end{bchart}
\end{quote}
The font style is sans-serif by default. This can be changed by redefining the command \texttt{bcfontstyle}:
\begin{quote}\small
\begin{verbatim}
\renewcommand{\bcfontstyle}{\bfseries}
\begin{bchart}[max=10,step=1]
  \bcbar{5.7}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\renewcommand{\bcfontstyle}{\bfseries}
\begin{bchart}[max=10,step=1]
  \bcbar{5.7}
\end{bchart}
\end{quote}
With an empty argument, the default font of the document is used:
\begin{quote}\small
\begin{verbatim}
\renewcommand{\bcfontstyle}{}
\begin{bchart}[max=10,step=1]
  \bcbar{5.7}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\renewcommand{\bcfontstyle}{}
\begin{bchart}[max=10,step=1]
  \bcbar{5.7}
\end{bchart}
\end{quote}


\section{Bars}

The bars of a bar chart can be modified in several ways. The \texttt{text}-option prints text within the inside of the bar:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=2,max=8]
  \bcbar[text=Year 1]{6}
  \bcbar[text=Year 2]{3}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=2,max=8]
  \bcbar[text=Year 1]{6}
  \bcbar[text=Year 2]{3}
\end{bchart}
\end{quote}

The bars can be given different background colors by the use of the \texttt{color}-option:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[max=8]
  \bcbar[text=A,color=yellow]{6}
  \bcbar[text=B,color=red!50]{3}
  \bcbar[text=C,color=green!60!blue]{4}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[max=8]
  \bcbar[text=A,color=yellow]{6}
  \bcbar[text=B,color=red!50]{3}
  \bcbar[text=C,color=green!60!blue]{4}
\end{bchart}
\end{quote}
In addition to predefined colors like \texttt{yellow} and \texttt{red}, new colors can be defined and existing ones can be combined. \texttt{red!50}, for example, stands for a 50\% saturated red, whereas \texttt{green!60!blue} stands for a color obtained by blending green and blue at a ratio of 60:40. See the TikZ manual for more information on how to manipulate colors. The default color for bars is \texttt{blue:20}.

The \texttt{plain}-flag can be used to prevent the value of the bar to be displayed:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=1,max=8]
  \bcbar[plain]{6}
  \bcbar[plain]{3}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=1,max=8]
  \bcbar[plain]{6}
  \bcbar[plain]{3}
\end{bchart}
\end{quote}

With the \texttt{value}-option, the value to be displayed to the right of the bar can be modified:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=2,max=8]
  \bcbar[value=six]{6}
  \bcbar[value=III]{3}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=2,max=8]
  \bcbar[value=six]{6}
  \bcbar[value=III]{3}
\end{bchart}
\end{quote}


\section{Skips}

The common commands \texttt{smallskip}, \texttt{medskip} and \texttt{bigskip} are redefined within the bar chart environment and can be used to insert skips of different sizes between two bars:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=2,max=10]
  \bcbar{3.4}
  \smallskip
  \bcbar{5.6}
  \medskip
  \bcbar{7.2}
  \bigskip
  \bcbar{9.9}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=2,max=10]
  \bcbar{3.4}
  \smallskip
  \bcbar{5.6}
  \medskip
  \bcbar{7.2}
  \bigskip
  \bcbar{9.9}
\end{bchart}
\end{quote}
With the \texttt{bcskip}-command, skips of arbitrary size can be inserted:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=10,max=100]
  \bcbar{83}
  \bcskip{3pt}
  \bcbar{25}
  \bcskip{15mm}
  \bcbar{69}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=10,max=100]
  \bcbar{83}
  \bcskip{3pt}
  \bcbar{25}
  \bcskip{15mm}
  \bcbar{69}
\end{bchart}
\end{quote}


\section{Labels}

The x-axis can be labeled by calling the \texttt{bcxlabel}-command:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=200,max=1000]
  \bcbar[text=Company A]{346}
  \bcbar[text=Company B]{873}
  \bcxlabel{number of employees}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=200,max=1000]
  \bcbar[text=Company A]{346}
  \bcbar[text=Company B]{873}
  \bcxlabel{number of employees}
\end{bchart}
\end{quote}
The option \texttt{label} can be used to label bars and skips:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=2,max=16]
  \bcbar[label=1st bar]{8.5}
  \bigskip[label=skip]
  \bcbar[label=2nd bar]{4.5}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=2,max=16]
  \bcbar[label=1st bar]{8.5}
  \bigskip[label=skip]
  \bcbar[label=2nd bar]{4.5}
\end{bchart}
\end{quote}
The command \texttt{bclabel} generates ``free'' labels at the respective position in the chart:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=2,max=16]
  \bcbar{8.5}
  \bclabel{free label}
  \bcbar{4.5}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=2,max=16]
  \bcbar{8.5}
  \bclabel{free label}
  \bcbar{4.5}
\end{bchart}
\end{quote}


\section{Units}

The \texttt{unit}-option of the chart environment attaches a unit to all values, like ``kg'', ``m\textsuperscript{2}'', or ``\%'':
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[min=50,max=100,step=10,unit=\%]
  \bcbar{72.3}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[min=50,max=100,step=10,unit=\%]
  \bcbar{72.3}
\end{bchart}
\end{quote}
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[min=50,max=100,step=10,unit=m\textsuperscript{2}]
  \bcbar{72.3}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[min=50,max=100,step=10,unit=m\textsuperscript{2}]
  \bcbar{72.3}
\end{bchart}
\end{quote}


\section{Width and Scaling}

The \texttt{width}-option of the chart environment allows for adjusting the width of the chart:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[max=10,step=2,width=4cm]
  \bcbar{7.5}
  \bcbar{3.2}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[max=10,step=2,width=4cm]
  \bcbar{7.5}
  \bcbar{3.2}
\end{bchart}
\end{quote}
Note that the height of the chart is not affected by this, nor is the size or shape of the text. The default width is 8cm.

In order to scale the complete chart (i.e. to change width and height in a proportional way), the \texttt{scale}-option can be used:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[max=10,step=2,scale=0.7]
  \bcbar{7.5}
  \bcbar{3.2}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[max=10,step=2,scale=0.7]
  \bcbar{7.5}
  \bcbar{3.2}
\end{bchart}
\end{quote}
Note that this does not change the size of the text either, only the bars and axes. To scale everything, including text, the chart environment has to be put into a \texttt{scalebox}-command instead:
\begin{quote}\small
\begin{verbatim}
\scalebox{0.7}{
\begin{bchart}[max=10,step=2]
  \bcbar{7.5}
  \bcbar{3.2}
\end{bchart}}
\end{verbatim}
\end{quote}
\begin{quote}
\scalebox{0.7}{
\begin{bchart}[max=10,step=2]
  \bcbar{7.5}
  \bcbar{3.2}
\end{bchart}}
\end{quote}

These three ways to change the size of the chart can all be combined to produce different kinds of scaling effects:
\begin{quote}\small
\begin{verbatim}
\scalebox{0.7}{
\begin{bchart}[max=10,step=2,width=4cm,scale=0.7]
  \bcbar{7.5}
  \bcbar{3.2}
\end{bchart}}
\end{verbatim}
\end{quote}
\begin{quote}
\scalebox{0.7}{
\begin{bchart}[max=10,step=2,width=4cm,scale=0.7]
  \bcbar{7.5}
  \bcbar{3.2}
\end{bchart}}
\end{quote}


\section{Known Issues}

There are some known issues with this package. Below, they are discussed and workarounds are presented.

When using fractions in the \texttt{step}-option, sometimes rounding errors become apparent:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[step=0.2,max=1]
  \bcbar{0.76}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[step=0.2,max=1]
  \bcbar{0.76}
\end{bchart}
\end{quote}
As a workaround, the \texttt{steps}-option can be used instead, where all marks must be listed explicitly:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[steps={0.2,0.4,0.6,0.8,1},max=1]
  \bcbar{0.76}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[steps={0.2,0.4,0.6,0.8,1},max=1]
  \bcbar{0.76}
\end{bchart}
\end{quote}

Another known issue is the fact that you can get a \LaTeX{} error message saying ``Dimension too large'' when using large numbers:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[max=20000]
  \bcbar{18000}
\end{bchart}
\end{verbatim}
\end{quote}
A possible workaround is moving the decimal point of all numbers by a couple of digits and manually adding the real value with the \texttt{value}-option:
\begin{quote}\small
\begin{verbatim}
\begin{bchart}[max=20]
  \bcbar[value=18000]{18}
\end{bchart}
\end{verbatim}
\end{quote}
\begin{quote}
\begin{bchart}[max=20]
  \bcbar[value=18000]{18}
\end{bchart}
\end{quote}
This is only a partial workaround though, since the numbers on the x-axis cannot be manually modified.

\end{document}

