LaTeX 中具有随机 x 轴值的直方图

LaTeX 中具有随机 x 轴值的直方图

我正在尝试在 LaTeX 中为以下坐标创建具有随机值的直方图

(22,7041) (3,299) (4,299) (5,305) (6,64) (7,127) (8,469) (9,279) (10,237) (11,267) (12,257) (13,200) (14,125) (15,54) (16,2554) (17,126) (18,3974) (19,3271) (20,2461) (21,110) (2,236) (23,545) (24,151)

使用以下代码

\begin{tikzpicture}
\begin{axis}[ybar, ymax=8000,ymin=0, minor y tick num = 3, xticklabel style={rotate=90},
symbolic x coords={14033,483,490,501,101,253,819,431,347,408,380,288,192,107,5092,251,6984,5614,4522,172,471,1085,301},
bar width = 4
]
\addplot coordinates {(14033,7041) (483,299) (490,299) (501,305) (101,64) (253,127) (819,469) (431,279) (347,237) (408,267) (380,257) (288,200) (192,125) (107,54) (5092,2554) (251,126) (6984,3974) (5614,3271) (4522,2461) (172,110) (471,236) (1085,545) (301,151)};

\end{axis}
\end{tikzpicture}    

下面给出的图是我在 excel 中生成并想使用 latex 生成的图。

Excel 直方图

在 Excel 中绘制给定值的直方图很容易,但在直方图中却无法绘制。任何帮助都将不胜感激。

提前致谢。

答案1

从图像中可以看出,您希望 x 值不排序。因此,您可以做的是ybar使用虚拟 x 坐标 (0,1,...) 绘制一个,然后添加自定义刻度标签。我首先将数据保存到文本文件(这会使事情变得更容易),然后使用\addplot table[x expr=\coordindex,y=y] {filename};而不是来执行此操作\addplot coordinates。该x expr语句意味着 x 值将是表中数据点的索引,y 值将是带有标题的列y

通过添加修改刻度标签

xticklabels from table={data.dat}{x},
xtick=data, 

axis选项。第二个表示在每个数据点处添加一个勾号。

下面我使用filecontents*环境来保存数据文件,但这只是为了使示例自成一体。您可以按照自己喜欢的方式生成文件(例如从 Excel 导出),而无需弄乱序言。

在此处输入图片描述

\documentclass[border=4mm]{standalone}  
\usepackage{filecontents}
% the filecontents environment saves its content to the specified file (data.dat)
\begin{filecontents*}{data.dat}
x  y
347  237
408  267
380  257
288  200
192  125
107  54
5092  2554
251  126
6984  3974
5614  3271
14033  7041
4522  2461
172  110
471  236
1085  545
301  151
483  299
490  299
501  305
101  64
253  127
819  469
431  279
\end{filecontents*}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document} 
\begin{tikzpicture}
\begin{axis}[
    width=12cm,
    height=6cm,
    ybar,
    bar width=0.7,
    ymin=0,
    ytick={0,1000,2000,3000,4000,5000,6000,7000,8000},
    xticklabel style={rotate=45,font=\footnotesize},
    xticklabels from table={data.dat}{x}, % use the x column from the file for ticklabels
    xtick=data, % add a tick at every data point,
    enlarge x limits=0.03, % adjust space between axis edge and plot edge
    xlabel=Number of something else,
    ylabel=Number of something
    ]
    \addplot table[x expr=\coordindex,y=y] {data.dat}; % \coordindex runs from 0 to N (number of datapoints in table/file
\end{axis}
\end{tikzpicture}
\end{document}

相关内容