答案1
这是一个使用包的解决方案pstricks
。基本思想就是忘记数据,把它们转换成长度。在这里,我简单地把它们转换成厘米,即除以 10.000:24.000 变成 2.4 厘米。手动放置所有内容。
所以我为网格绘制水平线并通过节点标记它们。//所有条形图都只是粗线;突出显示的条形图类似,但线条颜色不同;实际条形图和参考条形图也是黑色的。// 黑色条形图的值用简单的三点线和 \rput 表示。// 最后使用 \rput 将日期和周末天数放在图表下方。
我的快速构建编译选项在 Miktex 中必须包含 dvips 和 ps2pdf,就像我编译任何其他 pstricks 一样。
要在其他文档中使用该图表,我只需使用带有边界框适当设置的\includegraphics
包即可。graphicx
\documentclass[10pt]{article}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}[showgrid=false](0, -1)(12, 4)
% ~~~ grid ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\psset{linecolor = gray!50}
\psline (2, 2.4)(10, 2.4)
\rput [r] (1.5, 2.4) {24.000}
\psline (2, 1.8)(10, 1.8)
\rput [r] (1.5, 1.8) {18.000}
\psline (2, 1.2)(10, 1.2)
\rput [r] (1.5, 1.2) {12.000}
\psline (2, 0.6)(10, 0.6)
\rput [r] (1.5, 0.6) {6.000}
\psline (2, 0)(10, 0)
\rput [r] (1.5, 0) {0}
% ~~~ bars ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\psset{linewidth = 3mm, linecolor = gray}
% ~~~ regular bars ~~~~~~~~~~~
\psline (2.2, 0)(2.2, 1.99)
\psline (2.7, 0)(2.7, 2.15)
\psline (4.2, 0)(4.2, 1.34)
\psline (4.7, 0)(4.7, 1.53)
\psline (5.2, 0)(5.2, 1.85)
\psline (7.7, 0)(7.7, 1.08)
\psline (8.2, 0)(8.2, 1.44)
\psline (8.7, 0)(8.7, 1.76)
\psline (6.2, 0)(6.2, 2.35)
% ~~~ weekend ~~~~~~~~~~~~~~~~~
\psline [linecolor=gray!50](3.2, 0)(3.2, 2.34)
\psline [linecolor=gray!50](3.7, 0)(3.7, 1.60)
\psline [linecolor=gray!50](6.7, 0)(6.7, 2.25)
\psline [linecolor=gray!50](7.2, 0)(7.2, 1.69)
% ~~~ highlighted bars, with 3-point line + values ~~~
\psline [linecolor=black] (5.7, 0)(5.7, 2.19)
\psline [linewidth = 1 pt] (4.7, 2.3)(5.7, 2.3)(5.7, 2.2)
\rput [r] (5.7, 2.5) {21.866}
\psline [linecolor=black] (9.2, 0)(9.2, 2.26)
\psline [linewidth = 1 pt] (8.2, 2.4)(9.2, 2.4)(9.2, 2.3)
\rput [r] (9.2, 2.6) {22.609}
% ~~~ date ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\rput (2.2, -6 mm) {5.November}
\rput (5.7, -6 mm) {12.November}
\rput (9.2, -6 mm) {19.November}
% ~~~ weekend ~~~~~~~~~~~~~~~~~~~~~~
\rput (3.2, -3 mm){Sa}
\rput (3.7, -3 mm){So}
\rput (6.7, -3 mm){Sa}
\rput (7.2, -3 mm){So}
\end{pspicture}
\end{document}
结果:
答案2
这是一个使用包的解决方案tikz
。基本思想就是忘记数据,把它们转换成长度。在这里,我简单地把它们转换成厘米,即除以 10.000:24.000 变成 2.4 厘米。手动放置所有内容。
因此我为网格绘制水平线并通过节点标记它们。//常规条形图是一系列绘制 [ybar]s;突出显示的条形图类似,但填充颜色不同;实际条形图和参考条形图也是黑色的。// 最后,将日期和周末天数作为节点放在图表下方。// 我没有将值放在黑条上方,而在 tikz 中这样做很简单。
我在 Miktex 中的 Quick Build 编译选项与我编译的任何其他 Latex 文档相同。
要在其他文档中使用该图表,我只需使用带有边界框适当设置的\includegraphics
包即可。graphicx
\documentclass[10pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[ybar]
% ~~~ Grid ~~~~~~~~~~~~~~~~~
\draw (10, 2.4) -- (1.5, 2.4) node(xline) [left] {$24.000$};
\draw (10, 1.8) -- (1.5, 1.8) node(xline) [left] {$18.000$};
\draw (10, 1.2) -- (1.5, 1.2) node(xline) [left] {$12.000$};
\draw (10, 0.6) -- (1.5, 0.6) node(xline) [left] {$6.000$};
\draw (10, 0.0) -- (1.5, 0.0) node(xline) [left] {$0.000$};
% ~~~ bars ~~~~~~~~~~~~~~~
\draw[color=gray, fill=gray, bar width=3mm]
plot coordinates{(2.2, 1.99)(2.7, 2.15)
(4.2, 1.34)(4.7, 1.53)(5.2, 1.85)
(6.2, 2.35)(7.7, 1.08)(8.2, 1.44)(8.7, 1.76) };
% ~~~ highlighted bars ~~~~~~~~~~~
\draw[color=gray!50, fill=gray!50, bar width=3mm]
plot coordinates{(3.2, 2.34) (3.7, 1.60)
(6.7, 2.25)(7.2, 1.69)};
% ~~~ actual + the week before ~~~~~~~~~~
\draw[color=black, fill=black, bar width=3mm]
plot coordinates{(5.7, 2.19)(9.2, 2.26)};
% ~~~ date ~~~~~~~~~~~~~~~~~~~
\draw (2.2, -6 mm) node{5.November};
\draw (5.7, -6 mm) node{12.November};
\draw (9.2, -6 mm) node{19.November};
% ~~~ weekend ~~~~~~~~~~~~~~
\draw (3.2, -3 mm) node{Sa};
\draw (3.7, -3 mm) node{So};
\draw (6.7, -3 mm) node{Sa};
\draw (7.2, -3 mm) node{So};
\end{tikzpicture}
\end{document}
结果: