我试图在同一个轴环境中绘制两个图。两个图都使用符号 X 坐标(和符号 Y 坐标),但第一个图中未出现的 X 值将不会出现在最后一个图的 X 轴标签中,即仅出现在第二个图中的 X 坐标将不会获得 X 刻度标签。
我怎样才能使这些标签显示在所有符号 X 坐标上?使用xticklabels
似乎没有起到作用。
b2
并且c2
也应该出现在 X 轴上。
\documentclass{standalone}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.9}
\begin{filecontents}{dataI.csv}
xitem,yitem,val
a1,X,0.1
a2,Y,0.5% adding this will make the a2 label appear, but I don't want this value. And using `nan` will be plotted as 0.
a1,Z,0.3
b1,Y,0.5
b1,Z,0.6
c1,X,0.8
\end{filecontents}
\begin{filecontents}{dataII.csv}
xitem,yitem,val
a2,X,0.1
b2,Y,0.5
b2,Z,0.6
c2,Y,0.8
c2,Y,0.7
\end{filecontents}
\pgfplotstableread[col sep=comma]{dataI.csv}\datatableI
\pgfplotstableread[col sep=comma]{dataII.csv}\datatableII
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xtick=data, ytick=data, unbounded coords=jump,
symbolic x coords={a1,a2,b1,b2,c1,c2}, symbolic y coords={X,Y,Z},
xticklabels={a1,a2,b1,b2,c1,c2},% has no effect
y dir=reverse, axis line style={draw=none}, tick style=transparent,
y tick label style={inner sep=0, font=\tiny,},
x tick label style={inner sep=0, font=\tiny, rotate=90, anchor=east,},
enlarge x limits={abs=1mm}, enlarge y limits={abs=1mm},
x=2mm, y=2mm,
]
\addplot[
mark=square*, mark size=1mm, only marks, scatter, mark options={outer sep=0}, scatter/use mapped color={fill=mapped color,draw opacity=0},
point meta=explicit,
] table [col sep=comma, x=xitem, y=yitem, meta expr=\thisrow{val},]{\datatableI};
\addplot[ mark=diamond*, mark size=1mm, only marks, scatter, mark options={outer sep=0}, scatter/use mapped color={fill=mapped color,draw opacity=0},
point meta=explicit,
] table [col sep=comma, x=xitem, y=yitem, meta expr=\thisrow{val},
] {\datatableII};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
xtick=data
仅使用第一个\addplot
命令来确定刻度位置。您可以使用以下命令获得所需结果xtick={a1,a2,b1,b2,c1,c2}
: