我正在尝试在 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 中绘制给定值的直方图很容易,但在直方图中却无法绘制。任何帮助都将不胜感激。
提前致谢。
答案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}