我编写了这个 LaTeX 代码来生成直方图。出现的问题是直方图条重叠且看起来定义不明确,因为图中有很多坐标,即 1740。有没有办法调整图形大小以使其看起来尽可能清晰?以下是我的代码:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar interval,
xlabel={Feature},
ylabel={Value},
ymin=0,
ymax=1,
xtick=\empty,
xticklabels=\empty,
ytick=\empty,
yticklabels=\empty,
legend style={at={(0.5,-0.15)},
anchor=north,legend columns=-1},
]
\addplot[ybar,fill=yellow] coordinates {(1,0.5673234066308034) (2,0.2610627037789374) (3,0.19810336628001157) (4,0.17819359523137376) (5,0.17591815359754182) (6,0.174282741730368) %other coordinate
(435,0.0701053325628252) };
\addplot[ybar,fill=gray] coordinates {(436,0.07006473264772355) (437,0.07001409888465146) (438,0.06996899553023585)
%other coordinate
(1740,0.02100317004724812) };
\legend{Selezionate, Non Selezionate}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
据我了解,您在可视化过于密集的数据时遇到了问题。以下是我的分析:
ybar
从s切换到ycomb
s(可以说是细条)并没有改变视觉重叠- 你根本无法分辨出 2000 个数据分布在 20 厘米 = 200 毫米的范围内,因此 1 个数据“条”的宽度约为 0.2 毫米 = 200 纳米,这属于紫外线波长范围,仅供参考
- 由于分辨率有限,切换到线图或散点图也无济于事
为了验证并表明您的数据在原则上足够好,我将它们放在对数 x 尺度上:
修改后的代码:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}[
title={Demonstrating the visual problem: too many data},
% ybar interval,
% xlabel={Feature},
% ylabel={Value},
% ymin=0,
% ymax=1,
% xtick=\empty,
% xticklabels=\empty,
% ytick=\empty,
% yticklabels=\empty,
% legend style={at={(0.5,-0.15)},
% anchor=north,legend columns=-1},
ycomb,
]
\addplot[red] coordinates {(1,0.5673234066308034) (2,0.2610627037789374) (3,0.19810336628001157) (4,0.17819359523137376) (5,0.17591815359754182) (6,0.174282741730368) %other coordinate
(435,0.0701053325628252) };
\addplot[gray] coordinates {(436,0.07006473264772355) (437,0.07001409888465146) (438,0.06996899553023585)
%other coordinate
(1740,0.02100317004724812) };
\legend{Selezionate, Non Selezionate}
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
因此,如果这个问题仍然存在,我建议改变可视化的方式。以下是针对不同解决方案的几种场景:
- 拆分和复制:不要使用 1 个大(宽)图,而是使用多个图,每个图代表 200 个数据点(即 9 个图)
- 少做一点:总结成类;使用直方图、箱线图或小提琴图(后者有一个新的包)来描述每个类
- 匆匆浏览:提供 2 个分布,一个用于 Selezionate,一个用于 Non Sel。
- 反转(某种):如果序列数字没有意义,请找到不同的方式来查看、感知和可视化您的数据;即,该图表真正想要表达什么?它唯一的关键信息是什么?