如何模仿这种条形图样式?

如何模仿这种条形图样式?

最近我不得不重新绘制一个条形图,样式类似于屏幕截图,使用黑色、白色和灰色。显然,没有可用的软件包支持这种风格。

如何做,例如用pstrickstikz

模仿的条形图样式

答案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}

结果

结果

相关内容