円グラフでパターン塗り分けを使う方法

円グラフでパターン塗り分けを使う方法

- 土屋 勝 の投稿
返信数: 3
pgf-pieで円グラフを描き,領域をnorth west linesなどのパターンで塗り分ける方法はありますか。プリアンブル部に\usetikzlibrary{patterns}は書いてあり,「\tikz\draw[pattern=horizontal lines] rectangle ++(1,0.5);」などはパターン塗り分けできています。

\begin{tikzpicture}
\pie{[pattern=north east lines]51/反対,49/賛成}
\pie{51/反対,49/賛成}
\end{tikzpicture}

pattern=north east linesの行を有効にしていると
Package PGF Math Error: Unknown function `pattern' (in '[pattern=north east l
ines]51').
というエラーが出てしまいます。
pgf-pieのマニュアル『Drawing Pie Chart by using pgf-pie』を読んだけど,書いてありません。pgf-pieではパターン塗り分けは使えない,ということでしょうか。
\pie[color={gray!90, gray!70,・・・]で色塗りは指定できるのですが。
土屋 勝 への返信

Re: 円グラフでパターン塗り分けを使う方法

- 和田 勇 の投稿
「51/反対」だけをハッチングしたいということかしら?

まだ確証は掴んでいませんが pgf-pie だとできないというのが私の現状認識。

pgf-pie の場合、「反対」「賛成」などの各要素毎にオプション設定を行う場合は
pgf-pie のマニュアル p2 1.3 Color にあるように調整可能です。

        \pie[color={black!10, black!20, black!30, black!40}] {10/A, 20/B, 30/C, 40/D}

        話はちょっとそれますが ...注意点
        OK \pie[オプション]{記述} % 記述の外でオプション指定する
        NG \pie{[オプション]記述}

元に戻って、pattern={north east lines} はパスしますが効果なし、
また pattern={north east line, grid} は解釈できずエラー。

現状、 pgf-pie で色々試した範囲の結果です。

行き詰まったのでインタネット検索。
画像でハッチングしている例を見てみましたところ、
「要素(slice)」毎に色々設定可能な方法がありました。

残念なことに pgf-pie は使わっていないので、参考に URL を紹介しておきます。

https://tex.stackexchange.com/questions/394087/how-to-hatch-pie-charts-in-tikz-pgf
https://tex.stackexchange.com/questions/162961/pie-chart-slice-with-pattern-background

また、TiKZ に精通された識者が補足していただけるかもしれないので、検証し、とりあえずエラーなしソースを
貼り付けておきます。

\documentclass{jlreq}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usepackage{pgf-pie} % Pie chart drawing library

\begin{document}
\begin{tikzpicture}
\pie[color={black!10, black!20, black!30, black!40},pattern=north east lines]{53/反対,49/賛成}
\end{tikzpicture}
\end{document}

和田 勇 への返信

Re: 円グラフでパターン塗り分けを使う方法

- 土屋 勝 の投稿
和田様 コメントありがとうございます
やはり pgf-pieではパターン塗りには対応していないのですね。
モノクロで円グラフを表示する時,グレイの濃度差では分かりにくいため,パターンで塗れるといいなと思ったのですが。
土屋 勝 への返信

Re: 円グラフでパターン塗り分けを使う方法

- 北見 けん の投稿
TikZは使っていないので、ご質問の回答としては役に立たないのですが、
MePoTeXだとこんな風にできますという例です。

質問に便乗してMePoTeX仲間を増やそうともくろんでいるだけなので、
お返事など、お気遣いは無用です。

dviout用に書いたのですが、そのままdvipdfmxでPDFになるようです。
私のところは環境が古いので、最近の環境で同じようになるかどうかはわかりませんが。

(追記)
## アップロード後にPDFをブラウザで開いてみたら、やはりラベルの文字が出ないようです。
## アップロード前の手元のファイルをAcrobatReaderで開くとちゃんと見えるのですが。

\documentclass{article}
\usepackage[dviout]{graphicx}
\usepackage{MePoTeX}
\begin{document}
\begin{MPpic}<1in>(4,4)(-2,-2)
\sendMP{
R=1.5w;
def secpoint(expr d):=(R*dir(90-3.6*d)) enddef;
% 上から時計回りにパーセンテージで方向を指定するマクロ
}
\mptPoint{z.O}{(0,0)}

\mptCircPath{patha}[f]{z.O}{secpoint(35)}{secpoint(0)}
\mptDrawPath[filltype=amikake, amidir=120]{patha}
\mptLabel{0.5secpoint(35/2)}{よかった}

\mptCircPath{pathb}[f]{z.O}{secpoint(60)}{secpoint(35)}
\mptDrawPath[filltype=amikake, amidir=45]{pathb}
\mptLabel{0.6secpoint((60+35)/2)}{まあよかった}

\mptCircPath{pathc}[f]{z.O}{secpoint(75)}{secpoint(60)}
\mptDrawPath[filltype=amikake, amidir={-10,80}]{pathc}
\mptLabel[xshift=-1.5zw]{0.5secpoint((75+60)/2)}{まあよくなかった}

\mptCircPath{pathd}[f]{z.O}{secpoint(80)}{secpoint(75)}
\mptDrawPath[filltype=amikake, amidir={60,30}]{pathd}
\mptLabel[xshift=-2zw]{0.5secpoint((80+75)/2)}{よくなかった}

\mptCircPath{pathe}[f]{z.O}{secpoint(100)}{secpoint(80)}
\mptDrawPath[filltype=none]{pathe}
\mptLabel{0.6secpoint((100+80)/2)}{無回答}

\end{MPpic}
\end{document}