在 TeX 中创建质粒图

在 TeX 中创建质粒图

我需要在 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}

相关内容