我需要在 TeX 中创建质粒图,如下所示:
上面的图片略有不同,但展示的内容基本相同,因此如果我能用 TeX 创建其中任何一张就太好了。当然,直接插入图片很容易,但如果没有类似的东西,我想挑战一下自己。
是否有任何包可以用来创建这样的图表或者我应该创建自己的包?
答案1
我同意公斤生成实际数据应该由脚本完成。为了具有一定的可读性(以防您事后需要手动调整某些内容,例如用特殊颜色突出显示某些内容),您绝对应该使用键值接口奎伯比尔贝尔建议。我会选择鍵盤,这已经是蒂克兹。这是使用随机数据的起点:
代码
\documentclass[tikz,border=2mm]{standalone}
\tikzset{
plasmidopt/.is family,
plasmidopt,
radius/.initial=3,
height/.initial=0.3,
color/.initial=blue!50,
start angle/.initial=0,
stop angle/.initial=6,
scale/.initial=1,
}
\newcommand{\plasmidkey}[1] % access a specific key by name
{ \pgfkeysvalueof{/tikz/plasmidopt/#1}}
\newcommand{\plasmid}[1]{
\tikzset{plasmidopt,#1} % Process Keys passed to command
\fill[\plasmidkey{color}] (\plasmidkey{start angle}:\plasmidkey{radius}) arc (\plasmidkey{start angle}:\plasmidkey{stop angle}:\plasmidkey{radius}) -- (\plasmidkey{stop angle}:\plasmidkey{radius}+\plasmidkey{height}) arc (\plasmidkey{stop angle}:\plasmidkey{start angle}:\plasmidkey{radius}+\plasmidkey{height}) -- cycle;
}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,5,...,359.9} % random data
{ \pgfmathsetmacro{\mycolorvalue}{random(10,90)}
\pgfmathsetmacro{\myheight}{0.1+rand}
\pgfmathsetmacro{\myend}{\x+4*rnd+1}
\plasmid{radius=3,height=\myheight,color=red!\mycolorvalue!cyan,start angle=\x,stop angle=\myend}
}
\draw circle (3);
\end{tikzpicture}
\end{document}
输出
编辑1: 当您夜晚站在纽约的一个沙井底部向上看时,您会看到什么?
代码
\begin{tikzpicture}
\fill[inner color=black, outer color=black!70!blue] (0,0) circle (4.5);
\foreach \star in {1,...,256}
{ \pgfmathsetmacro{\starradius}{rnd/50}
\fill[inner color=yellow,outer color=yellow!20!black] ({random(0,359)}:{3*rnd}) circle (\starradius);
}
\foreach \x in {0,5,...,359.9} % random data
{ \pgfmathsetmacro{\mycolorvalue}{random(10,90)}
\pgfmathsetmacro{\myheight}{-rnd}
\pgfmathsetmacro{\myend}{\x+4*rnd+1}
\plasmid{radius=3,height=\myheight,color=yellow!\mycolorvalue!orange,start angle=\x,stop angle=\myend}
}
\fill(-4.5,-4.5) rectangle (4.5,4.5) (0,0) circle (3);
\end{tikzpicture}
输出
答案2
这只是 Tom Bombadil 非常令人印象深刻的答案的一个小附加内容,展示了如何使用 PGFPlotstable 从表格(也可以是 CSV 文件)中提供宏数据。
您可以像这样提供数据(取自加基因):
\pgfplotstableread{
Name Start End Color Height
T7_terminator 129 1 20 0.1
T7_Terminal_primer 69 87 20 0.1
lacI 219 1858 20 0.1
T7_transl_en_RBS 322 306 90 0.2
lacO 367 340 90 0.2
T7_promoter 385 367 90 0.2
tet 421 684 90 0.1
pBRrevBam_primer 492 473 90 0.1
tet 1917 2192 50 0.3
ROP 2667 2858 30 0.3
pGEX_3_primer 2874 2852 40 0.3
pBR322_origin 3892 3273 10 0.5
KanR2 3998 4813 10 0.6
}\datatable
生产
\documentclass[tikz,border=2mm]{standalone}
\usepackage{pgfplots}
\tikzset{
plasmidopt/.is family,
plasmidopt,
radius/.initial=3,
height/.initial=0.3,
color/.initial=blue!50,
start angle/.initial=0,
stop angle/.initial=6,
scale/.initial=1,
}
\newcommand{\plasmidkey}[1] % access a specific key by name
{ \pgfkeysvalueof{/tikz/plasmidopt/#1}}
\newcommand{\plasmid}[1]{
\tikzset{plasmidopt,#1} % Process Keys passed to command
\fill[\plasmidkey{color}] (\plasmidkey{start angle}:\plasmidkey{radius}) arc (\plasmidkey{start angle}:\plasmidkey{stop angle}:\plasmidkey{radius}) -- (\plasmidkey{stop angle}:\plasmidkey{radius}+\plasmidkey{height}) arc (\plasmidkey{stop angle}:\plasmidkey{start angle}:\plasmidkey{radius}+\plasmidkey{height}) -- cycle;
}
\begin{document}
\pgfplotstableread{
Name Start End Color Height
T7_terminator 129 1 20 0.1
T7_Terminal_primer 69 87 20 0.1
lacI 219 1858 20 0.1
T7_transl_en_RBS 322 306 90 0.2
lacO 367 340 90 0.2
T7_promoter 385 367 90 0.2
tet 421 684 90 0.1
pBRrevBam_primer 492 473 90 0.1
tet 1917 2192 50 0.3
ROP 2667 2858 50 0.3
pGEX_3_primer 2874 2852 50 0.3
pBR322_origin 3892 3273 50 0.5
KanR2 3998 4813 50 0.6
}\datatable
\def\mymaxvalue{5372}
\begin{tikzpicture}
\pgfplotstablegetrowsof{\datatable}
\pgfmathtruncatemacro\rows{\pgfplotsretval-1}
\foreach \row in {0,...,\rows}{
\pgfplotstablegetelem{\row}{Start}\of\datatable
\pgfmathsetmacro\mystart{-\pgfplotsretval/\mymaxvalue*360+90}
\pgfplotstablegetelem{\row}{End}\of\datatable
\pgfmathsetmacro\myend{-\pgfplotsretval/\mymaxvalue*360+90}
\pgfplotstablegetelem{\row}{Height}\of\datatable
\edef\myheight{\pgfplotsretval}
\pgfplotstablegetelem{\row}{Color}\of\datatable
\edef\mycolorvalue{\pgfplotsretval}
\plasmid{radius=3,height=\myheight,color=red!\mycolorvalue!cyan,start angle=\mystart,stop angle=\myend}
}
\draw circle (3);
\end{tikzpicture}
\end{document}