我使用 Tikz 创建了一个带有颜色条的混淆矩阵。但问题是有些类别的样本比其他类别多得多,因此我认为在颜色条上使用对数刻度会更具代表性。如何使用 tikz 和 pgfplots 做到这一点?
\begin{tikzpicture}
\begin{axis}[
colormap={bluewhite}{color=(white) rgb255=(90,96,191)},
xlabel=Predicted,
xlabel style={yshift=-30pt},
ylabel=Actual,
ylabel style={yshift=20pt},
xticklabels={Class 1, Class 2, Class 3, Class 4},
xtick={0,...,3},
xtick style={draw=none},
yticklabels={Class 1, Class 2, Class 3, Class 4},
ytick={0,...,3},
ytick style={draw=none},
enlargelimits=false,
colorbar,
xticklabel style={
rotate=90
},
nodes near coords={\pgfmathprintnumber\pgfplotspointmeta},
nodes near coords style={
yshift=-7pt
},
]
\addplot[
matrix plot,
mesh/cols=4,
point meta=explicit,draw=gray
] table [meta=C] {
x y C
0 0 0
1 0 630
2 0 8
3 0 4
0 1 0
1 1 0
2 1 1
3 1 79
0 2 0
1 2 0
2 2 1
3 2 0
0 3 0
1 3 0
2 3 0
3 3 83
};
\end{axis}
\end{tikzpicture}
我确实希望混淆矩阵上的数字保持不变,我只是希望颜色本身呈对数刻度。我确实知道 0 会出现问题,但也许可以将其作为计算中的特殊情况进行修复。
答案1
在 freenode 某人的帮助下,我设法找到了解决方案。这可以通过计算对数元,然后显示原始值而不是转换后的元值来解决。0 的问题通过加 1 来解决。
\begin{tikzpicture}
\begin{axis}[
colormap={bluewhite}{color=(white) rgb255=(90,96,191)},
xlabel=Predicted,
xlabel style={yshift=-30pt},
ylabel=Actual,
ylabel style={yshift=20pt},
xticklabels={Class 1, Class 2, Class 3, Class 4},
xtick={0,...,3},
xtick style={draw=none},
yticklabels={Class 1, Class 2, Class 3, Class 4},
ytick={0,...,3},
ytick style={draw=none},
enlargelimits=false,
xticklabel style={
rotate=90
},
nodes near coords={\pgfmathprintnumber\Cvalue},
visualization depends on={\thisrow{C} \as \Cvalue},
nodes near coords style={
yshift=-7pt
},
]
\addplot[
matrix plot,
mesh/cols=4,
point meta={log10(\thisrow{C}+1)},
draw=gray
] table {
x y C
0 0 0
1 0 630
2 0 8
3 0 4
0 1 0
1 1 0
2 1 1
3 1 79
0 2 0
1 2 0
2 2 1
3 2 0
0 3 0
1 3 0
2 3 0
3 3 83
};
\end{axis}
\end{tikzpicture}