匹配 OP

匹配 OP

受到下图的启发,我尝试用 tikz 复制它。我想在一些细节上修改它: 在此处输入图片描述

  1. 彩色背景的边缘应该是均匀的。
  2. 我不需要氨基酸之间的键,我更喜欢它们分开

这是我的第一次尝试:

\documentclass{standalone}%
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri}
\usepackage{chemfig,xstring}
\begin{document}
\setatomsep{2.5em}
\setcrambond{2pt}{}{}
\begin{tikzpicture}[
 point/.style={circle,draw=none,minimum size=#1},
 point/.default=0pt % default Wert für minimum size bei point]
 \foreach \anfang/\ende/\farbe in { 25/100/green!60,104/170/orange!60,174 /254/red!60, 258/314/yellow!60, 318/381/blue!60}
\draw[fill=\farbe,draw=none] (0,0) -- (\anfang:12cm) arc (\anfang:\ende:12cm);
\draw[fill=white,draw=none] (0,0) circle (6cm);

% mit count=\i werden die Kreise nummeriert
% der zugehörige Winkel wird mit evaluate aus dieser Nummer berechnet
% insgesamt werden (bis zu) 20 Kreise auf 360 Grad gleichmäßig verteilt
\foreach[count=\i,evaluate=\i as \angle using (\i-1)*360/20] \text in {%
  1,2,3,4,\begin{tiny}\schemestart \chemnameinit{}\chemname{\chemfig{C(=[3]O)(-[1]OH)(-[6]CH_2(-[6]CH(-[5]NH_2)(-[7]C(=[6]O)(-[1]OH))))}}{Asparaginsäure\\Asp\\D} \schemestop\end{tiny},\begin{tiny}\schemestart \chemnameinit{} \chemname{\chemfig{CH(-[3]NH_2)(-[1]C(=[2]OH)(-[7]OH))(-[6]CH_2(-[6]C(=[5]O)(-[7]NH_2)))}}{Asparagin\\Asn\\N}\schemestop\end{tiny},7,8,9,10,11,12,13,14,15,16,17,18,19,20% Beschriftung der Kreise
}
\node[point=2.2em] (node\i) at (\angle:9) {\text};
\end{tikzpicture}
\end{document}

我在另一个 TeX 文件中写了氨基酸的结构,通常使用命令\input。对于 MWE,两个氨基酸就足够了。

我如何旋转节点/氨基酸使它们指向内圆的中心?

任何替代解决方案也都值得欢迎。

非常抱歉,我无法评论我自己的问题,因此我在这里添加信息。

@Alenanno 非常感谢您非常有帮助的回答。

我不想要相同的图形。事实上,我喜欢目前所得到的:所有结构公式都在彩色圆圈中,与中心的距离几乎相同。

下一步是外部描述(小、极性(亲水性)等)。如果可能的话,如果我能做到,我希望描述位于彩色圆圈内缘的结构式下方。

你能告诉我如何解决单个节点的问题吗?

你定义了 \aminoacid 命令来做什么? - 我无法从 MWE 中获取它

问候

@Alenanno:这正是我想要的!非常感谢!有没有在“已接受”按钮旁边标记答案的功能?

更新:这是我的最终输出,非常适合我。特别感谢 Alenanno。 在此处输入图片描述

答案1

您可以将节点添加rotate=\angle-90到由 foreach 打印的节点中。

编辑:由于您不想要 OP 中的图像,因此这是您的修复版本。请注意,您可以绘制彩色弧线,而无需在中间用白色圆圈“切割”。我已经修复了这个问题。我认为描述符合您的要求(德语字符应该修复)。如果您不想让它们变色,请\color{\farbe}从代码中删除该行。

编辑2:请参阅下文以了解不同版本。

输出

在此处输入图片描述

代码

\documentclass[margin=10pt]{standalone}%
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{calc, arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri, intersections, decorations.text}
\usepackage{pgfmath}
\usepackage{chemfig,xstring}

\tikzset{
    point/.style={minimum size=#1},
    point/.default=0pt,
    bent text/.style={postaction={
            decorate,
            decoration={
                text along path,
                reverse path=true,
                text align/align=center,
                text={| \Large\bfseries\color{\farbe}|#1}
            }
        }
    }
}


\def\colorlist{{"green!60", "orange!60", "red!60", "yellow!60", "blue!60"}}

\begin{document}
\setatomsep{2.5em}
\setcrambond{2pt}{}{}
\begin{tikzpicture}\tiny
 \foreach \anfang/\ende/\descr [count=\ix starting from 0] in {%
    25/100/{klein polar (hydrophil)},
    104/170/{groß, polar (hydrophil)},
    174/254/{mittiere Polarität},
    258/314/{groß unpolar},
    318/381/{klein, unpolar}}{
    \pgfmathsetmacro\farbe{\colorlist[\ix]}
    \fill[\farbe] (\anfang:6cm) -- (\anfang:12cm) arc (\anfang:\ende:12cm) -- (\ende:6cm) arc (\ende:\anfang:6cm);
    \path[bent text={\descr}] (\anfang:5cm) arc (\anfang:\ende:5cm);
}
% mit count=\i werden die Kreise nummeriert
% der zugehörige Winkel wird mit evaluate aus dieser Nummer berechnet
% insgesamt werden (bis zu) 20 Kreise auf 360 Grad gleichmäßig verteilt
\foreach [count=\i, evaluate=\i as \angle using int((\i-1)*360/20), evaluate=\i as \midangle using int((\i-1.5)*360/20), remember=\midangle as \lastmid (initially -27)] \text in {%
 1,2,3,4,
  \schemestart \chemnameinit{}\chemname{\chemfig{C(=[3]O)(-[1]OH)(-[6]CH_2(-[6]CH(-[5]NH_2)(-[7]C(=[6]O)(-[1]OH))))}}{Asparaginsäure\\Asp\\D} \schemestop,
  \schemestart \chemnameinit{} \chemname{\chemfig{CH(-[3]NH_2)(-[1]C(=[2]OH)(-[7]OH))(-[6]CH_2(-[6]C(=[5]O)(-[7]NH_2)))}}{Asparagin\\Asn\\N}\schemestop
  ,7,8,9,10,11,12,13,14,15,16,17,18,19,20% Beschriftung der Kreise
}{

\node[point=2.2em, rotate=\angle-90] (node\i) at (\angle:9) {\text};
}
\end{tikzpicture}
\end{document}

匹配 OP

这是适合您图像的另一个版本。

输出

在此处输入图片描述

代码

\documentclass[margin=10pt]{standalone}%
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{calc, arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri, intersections, decorations.text}
\usepackage{pgfmath}
\usepackage{chemfig,xstring}

\definecolor{xlime}{RGB}{228,246,13}
\definecolor{xpink}{RGB}{245,109,175}
\definecolor{xorange}{RGB}{232,117,53}
\definecolor{xgreen}{RGB}{151,184,43}
\definecolor{xblue}{RGB}{144,181,236}

\tikzset{
    point/.style={minimum size=#1},
    point/.default=0pt,
    bent text/.style={postaction={
            decorate,
            decoration={
                text along path,
                reverse path=true,
                text align/align=center,
                text={| \Large\bfseries\color{\farbe}|#1}
            }
        }
    }
}

\newcommand\aminoacids[4][black]{
    \node[point=2.2em, minimum width=5cm,rotate=\angle-90, inner sep=2mm] (node#2) at (#3) {#4};
    \path[green, name path=around] (node#2.north west) -- (node#2.north east) -- (node#2.south east) -- (node#2.south west) -- cycle;
    \path[name path={tris#2}] (\midangle:12cm) -- (0,0) -- (\lastmid:12cm) -- cycle;
    \path[name intersections={of={tris#2} and around, name=i, total=\t}];
    \begin{scope}[on background layer]
        \filldraw[draw=black, fill=#1] (i-1) -- (i-2) -- (i-4) -- (i-3) -- cycle;
\end{scope}
}

\def\colorlist{{"xgreen", "xorange", "xpink", "xlime", "xblue"}}

\begin{document}
\setatomsep{2.5em}
\setcrambond{2pt}{}{}
\begin{tikzpicture}\tiny
 \foreach \anfang/\ende/\descr [count=\ix starting from 0] in {%
    25/100/{klein polar (hydrophil)},
    104/170/{groß, polar (hydrophil)},
    174/254/{mittiere Polarität},
    258/314/{groß unpolar},
    318/381/{klein, unpolar}}{%
    \pgfmathsetmacro\farbe{\colorlist[\ix]}
    \path[bent text={\descr}] (\anfang:5cm) arc (\anfang:\ende:5cm);
}

\foreach [count=\i, 
    evaluate=\i as \angle using int((\i-1)*360/20), 
    evaluate=\i as \midangle using int((\i-1.5)*360/20), 
    evaluate=\midangle as \lastmid using int((\i-.5)*360/20)
    ] 
    \text/\colr in {%
        1/0,2/0,3/0,4/0,
        \schemestart \chemnameinit{}\chemname{\chemfig{C(=[3]O)(-[1]OH)(-[6]CH_2(-[6]CH(-[5]NH_2)(-[7]C(=[6]O)(-[1] OH))))}}{Asparaginsäure\\Asp\\D} \schemestop/0,
        \schemestart \chemnameinit{} \chemname{\chemfig{CH(-[3]NH_2)(-[1]C(=[2]OH)(-[7]OH))(-[6]CH_2(-[6]C(=[5]O)(-[7]  NH_2)))}}{Asparagin\\Asn\\N}\schemestop/0
        ,7/1,8/1,9/1,10/2,11/2,12/2,13/3,14/3,15/3,16/3,17/4,18/4,19/4,20/4% Beschriftung der Kreise
}{
    \pgfmathsetmacro\farbe{\colorlist[\colr]}
    \aminoacids[\farbe]{\i}{\angle:9}{\text}
}
\end{tikzpicture}
\end{document}

相关内容