我正在尝试将所谓的“点图”转换为乳胶。这些图在生物学中用于比较序列。每个轴代表一个序列,点的坐标是实际的 X 和 Y 位置,类似于没有标记的图。
虽然整体情节相当简单,但我再次在轴上遇到困难。一个轴(X 或 Y)由几个连接的轴组成,例如 X 轴包含三个序列,总长度为 N,其中每个子序列的长度各不相同。我想要的是绘制 X 轴上每个子序列(从 0 到结束)的轴。或者更简单:如何在一个长 X 轴上绘制几个小 X 轴。
-----更新:
我发现我的 MWE 造成了一些混乱。我附上了一张我想使用 pgfplots 重现的示例图片。X 轴是一个单一序列,而 Y 轴有两个子序列:一个在右侧 Y 轴上表示,一个在左侧 Y 轴上表示。两者都以 0 开头并覆盖每个子序列的长度。第一个序列在第二个序列开始的地方结束。
正如杰克指出的那样,嵌套循环应该可以添加次要刻度。此外,MWE 中只有前两个子序列(共 17 个)。我不得不说,MWE 不是我在附图中显示的数据,但它应该表明我的问题
---\更新
我计算了每个子序列相应的开始和长度:
start length
Seq0 0.00 47.81
Seq1 47.82 59.93
Seq2 107.76 49.29
Seq3 157.06 52.94
我尝试了嵌套循环。外层循环用于每个子序列的开头,内层循环用于绘制刻度:
\foreach \start/\len in {0/47.81, 47.82/59.93, 107.76/49.29} % subsequences
\foreach \j in {0,100,...,\len} %% the minor ticks of the subsequences
但是,我没能用这个构造替换刻度,无论是将其放入x coord trafo/.code
还是直接绘制。pgfmanual 提到了不同类型的 foreach 循环,例如\pgfplotsforeachungrouped
,但我不明白如何使用它们来绘制自制轴。
我尝试了如下方法图中的图:放大图,使放大的部分被带有刻度和刻度标签的轴框住。这是迄今为止最有希望的方法,但我无法让子序列的两个轴并排并正确缩放。我怀疑这与我之前的问题类似堆叠条形图上的两个不同比例,但我不明白。
数学家协会
\documentclass[11pt, a4paper]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgflibrary{fpu}
\usepackage[margin = 1cm]{geometry}
\begin{document}
\begin{figure}
\begin{tikzpicture}
[rotate = -90]%% the origin (0/0) of the original plot and pgfplots differ
%%-----------
%%plotting dots
%%-----------
\begin{axis}[
enlargelimits = false,
only marks,
width = \linewidth,
hide x axis,
hide y axis,
]
\addplot
coordinates {
(704 , 704)%% lower right corner
(704 , 698)
(704 , 691)
(704 , 47)
(703 , 703)
(703 , 698)
(702 , 702)
(702 , 655)
(702 , 337)
(702 , 53)
(702 , 52)
%% more coordinates here. removed for simplicity
(11 , 11)
(10 , 10)
(9 , 9)
(8 , 8)
(7 , 7)
(6 , 6)
(5 , 5)
(4 , 4)
(3 , 3)
(2 , 2)
(1 , 1)
(1 , 0)
(0 , 0)%%upper left corner
};
\end{axis}
\node[anchor = east] at (0,0){\begin{axis}[%%<-- First subsequence
xmin = 0, xmax = 47.81,
ymin = 0, ymax = 1,
scale only axis,
hide y axis,
axis x line* = bottom,
enlargelimits = false,
]
\end{axis}};
\node[anchor = east] at (47.82,0){\begin{axis}[%%<-- Second subsequence
xmin = 0, xmax = 59.93,
ymin = 0, ymax = 1,
scale only axis,
hide y axis,
axis x line* = bottom,
enlargelimits = false,
]
\end{axis}};
\end{tikzpicture}
\end{figure}
\end{document}