您好,我的条形图缺少值 141 的 x 标签,而 117 的标签似乎向右移动。
有人知道如何解决这个问题吗?提前谢谢!
最小示例:
\documentclass[12pt]{article}
\usepackage{float}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\pgfplotstableread[col sep=semicolon]{
Size;MinCount;MaxCount
82;2;1
84;1352;1135
88;1;1
89;18;18
90;1689;1448
95;1;1
96;4;4
105;2;2
106;1;1
108;46;41
110;2;2
113;1;1
115;1;1
116;14;18
117;0;1096
126;1;1
129;1;1
140;1;0
141;1313;0
}\realtable
\begin{document}
\begin{figure}[H]
\centering
\scalebox{0.5}{
\pgfplotsset{compat=newest}
%\pgfplotstableread[col sep=semicolon]{Messwerte/ChargingIO.csv}\datatable
\begin{tikzpicture}
\begin{axis}[
ybar = 0pt,
bar width = 10pt,
x = 5ex,
xtick = data,
xticklabels from table = {\realtable}{Size},
enlarge x limits = {abs = 1},
ylabel={Allokationen},
ymode = log,
ymajorgrids = true,
major grid style = {very thick},
yminorgrids = true,
minor grid style = {dashed, thick},
]
\addplot table [x expr = \coordindex, y = {MinCount}]{\realtable};
\addplot table [x expr = \coordindex, y = {MaxCount}]{\realtable};
\end{axis}
\end{tikzpicture}
}
\caption[...]{}
\label{dia:..}
\end{figure}
\end{document}
答案1
这是一个基于的解决方案mdd 在此处描述的方法。
这个想法是存储列表xitcklabels
并手动排版它们,以避免被自动丢弃pgfplots
。除了mdd的答案之外,这里还必须xtick
手动定义,就像您table[x expr=\coordindex]
在图中使用的一样。
\documentclass[margin=3mm,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{pgfplotstable}
\pgfplotstableread[col sep=semicolon]{
Size;MinCount;MaxCount
82;2;1
84;1352;1135
88;1;1
89;18;18
90;1689;1448
95;1;1
96;4;4
105;2;2
106;1;1
108;46;41
110;2;2
113;1;1
115;1;1
116;14;18
117;0;1096
126;1;1
129;1;1
140;1;0
141;1313;0
}\realtable
\pgfplotstablegetcolumn{Size}\of\realtable\to\listnames % store column with names into \listnames
\pgfplotstablegetrowsof{\realtable}
\pgfmathtruncatemacro{\rowmax}{\pgfplotsretval-1}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar = 0pt,
bar width = 10pt,
x = 5ex,
xtick = {0,...,\rowmax},
xticklabel={
\pgfmathparse{int(\ticknum)}
\pgfplotslistselect\pgfmathresult\of\listnames\to\tempxticklabel
\tempxticklabel},
enlarge x limits = {abs = 1},
ylabel={Allokationen},
ymode = log,
ymajorgrids = true,
major grid style = {very thick},
yminorgrids = true,
minor grid style = {dashed, thick},
]
\addplot table [x expr = \coordindex, y = {MinCount}]{\realtable};
\addplot table [x expr = \coordindex, y = {MaxCount}]{\realtable};
\end{axis}
\end{tikzpicture}
\end{document}