Pgfplots:“老式”风格的条形图(半色调填充)

Pgfplots:“老式”风格的条形图(半色调填充)

我想知道如何才能获得类似于以更“老派”风格显示条形的图像的纹理。

在此处输入图片描述

我只能应用非常常见的风格

\documentclass{article}
\usepackage{pgfplots}

\begin{document}

    \begin{tikzpicture}
    \begin{axis}[
    title=Title,
    xbar,
    xmajorgrids = true,
    bar width=6mm, 
    width=12cm, height=5.5cm, 
    enlarge y limits=0.2,
    xlabel={\#number},
    symbolic y coords={A,B,C,D},
    ytick=data,
    nodes near coords, nodes near coords align={horizontal},
    ]

    \addplot coordinates {(1,A) (7,B) (5,C)(2,D)};
    \end{axis}
    \end{tikzpicture}

\end{document}

在此处输入图片描述

答案1

以下是一种方法元帖子定义了stipple一个与路径一起使用的新动词,而不是fill

点画条

我并没有尝试让它变得非常稳健(比如检查参数是否真的是一条封闭的路径等),您可能想尝试一下用于绘制点的笔的大小和/或形状,以及间距,以及使用的随机灰色量,但这可能是一个起点。对于大面积,您将得到很多点,这将使输出更大,处理速度更慢。

prologues := 3;
outputtemplate := "%j%c.eps";

def stipple primary pp = 
    interim bboxmargin := 0;
    for x = xpart llcorner bbox pp step 1/4 until xpart urcorner bbox pp:
        for y = ypart llcorner bbox pp step 1/4 until ypart urcorner bbox pp:
            drawdot (x,y) withpen pencircle scaled 1/2 withcolor (1/4 + uniformdeviate 1/2);
        endfor
    endfor
enddef;

beginfig(1);

    path a, b, c; 

    a = unitsquare xscaled 21 yscaled 34;
    b = unitsquare xscaled 21 yscaled 55 shifted 34 right;
    c = unitsquare xscaled 21 yscaled 89 shifted 68 right;

    forsuffixes $=a,b,c:
        stipple $; draw $;
    endfor

endfig;
end.

注意:要在 MP 中获得灰色阴影,语法是withcolor n其中n是数字变量。n小于或等于 0 的值被视为黑色;大于或等于 1 的值被视为白色;介于两者之间的值被视为灰色阴影。

上面发布的代码对于矩形路径(其中 的bbox形状与路径相同)运行良好,但对于任何其他类型的形状(例如圆形)则运行不佳。您可以通过点画然后剪切bbox到路径来解决这个问题。这是一个改进的例程:

prologues := 3;
outputtemplate := "%j%c.eps";

vardef stipple primary pp = 
    save ff; picture ff; ff=image(
    for x = xpart llcorner bbox pp step 1/4 until xpart urcorner bbox pp:
        for y = ypart llcorner bbox pp step 1/4 until ypart urcorner bbox pp:
            drawdot (x,y) withpen pencircle scaled 1/2 withcolor (1/4 + uniformdeviate 1/2);
        endfor
    endfor
    ); clip ff to pp; draw ff;
enddef;

beginfig(1);

    path a, b, c, d; 

    a = unitsquare xscaled 21 yscaled 34;
    b = unitsquare xscaled 21 yscaled 55 shifted 34 right;
    c = unitsquare xscaled 21 yscaled 89 shifted 68 right;

    d = fullcircle scaled  21 shifted 20 left;

    forsuffixes $=a,b,c,d:
        stipple $; draw $;
    endfor

endfig;
end.

应该可以正确填充任意闭合路径。

在此处输入图片描述

相关内容