所以我正在尝试一些东西:我想用一个循环从 dat 文件中读取圆圈的位置。绘图已经运行得很好了。但是现在我想实现从半透明到完全透明的逐渐着色。我希望能够设置中间半透明部分的不透明度。使用 .dat 文件中的预定义值。
我找到了这两个链接。但是我的绘图方式实际上不允许第二个链接的功能。
有没有办法可以实现这一点,同时又不失去透明度?
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usepackage{forloop}
\usepackage{pgfplotstable}
\usepackage{readarray}
\usepackage{ifthen}
\usepackage[left=4cm, right=10cm, top=2cm]{geometry}
\usepackage{filecontents}
\begin{filecontents*}{mydata.dat}
name test .dat
opacity: 10 percent
X Y Rad
0 0 0.75
0 1.8 0.75
0 3.6 0.75
0 5.4 0.75
0.75 0 0.75
0.75 1.8 0.75
0.75 3.6 0.75
0.75 5.4 0.75
1.5 0 0.75
1.5 1.8 0.75
1.5 3.6 0.75
1.5 5.4 0.75
2.25 0 0.75
2.25 1.8 0.75
2.25 3.6 0.75
2.25 5.4 0.75
3 0 0.75
3 1.8 0.75
3 3.6 0.75
3 5.4 0.75
3.75 0 0.75
3.75 1.8 0.75
3.75 3.6 0.75
3.75 5.4 0.75
4.5 0 0.75
4.5 1.8 0.75
4.5 3.6 0.75
4.5 5.4 0.75
5.25 0 0.75
5.25 1.8 0.75
5.25 3.6 0.75
5.25 5.4 0.75
6 0 0.75
6 1.8 0.75
6 3.6 0.75
6 5.4 0.75
\end{filecontents*}
\pgfplotsset{compat=1.16}
\begin{document}
\xdef \name {test.dat} %%
\readdef{\name}{\data}
\readarray\data\MyDat[-,39, 3]
\section*{\MyDat[1,1,2] }
\centering
\begin{tikzpicture}[square/.style={regular polygon,regular polygon sides=4}]
\def \opacity {\MyDat[1,2,2]/10*0.15}
\foreach \row in {4,...,39}{
\def\x{\MyDat[1,\row,1]}
\def\y{\MyDat[1,\row,2]}
\def\radius{\MyDat[1,\row,3]}
%\fill[red,opacity= \opacity] (\x,\y)circle(\radius cm);
%%%% This does not work:
\fill[even odd rule, inner color= red, outer color= red!5, ,opacity= \opacity,] (\x,\y)circle(\radius cm);
}
\end{tikzpicture}
\end{document}
答案1
正如解释的那样这个很好的答案,您可以通过首先定义径向阴影并将其用于淡入淡出来定义自定义径向淡入淡出。这允许您获得非常量渐变。它在这里用于创建近似高斯淡入淡出。为此,在mygauss
四个点处评估高斯值(存储在函数中)。这定义了这些点的透明度。您可以通过调整函数来更改渐变。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{fadings}
\usepackage{filecontents}
\begin{filecontents*}{test.dat}
name test .dat
opacity: 10 percent
X Y Rad
0 0 0.75
0 1.8 0.75
0 3.6 0.75
0 5.4 0.75
0.75 0 0.75
0.75 1.8 0.75
0.75 3.6 0.75
0.75 5.4 0.75
1.5 0 0.75
1.5 1.8 0.75
1.5 3.6 0.75
1.5 5.4 0.75
2.25 0 0.75
2.25 1.8 0.75
2.25 3.6 0.75
2.25 5.4 0.75
3 0 0.75
3 1.8 0.75
3 3.6 0.75
3 5.4 0.75
3.75 0 0.75
3.75 1.8 0.75
3.75 3.6 0.75
3.75 5.4 0.75
4.5 0 0.75
4.5 1.8 0.75
4.5 3.6 0.75
4.5 5.4 0.75
5.25 0 0.75
5.25 1.8 0.75
5.25 3.6 0.75
5.25 5.4 0.75
6 0 0.75
6 1.8 0.75
6 3.6 0.75
6 5.4 0.75
\end{filecontents*}
\usepackage{readarray}
% from https://tex.stackexchange.com/a/82444/121799
\begin{document}
\xdef\name{test.dat} %%
\readdef{\name}{\data}
\readarray\data\MyDat[-,39, 3]
\section*{\MyDat[1,1,2]}
\tikzset{declare function={mygauss(\x)=100-100*exp(-5*\x*\x);}}%
\pgfmathtruncatemacro{\myvalA}{mygauss(0)}%
\pgfmathtruncatemacro{\myvalB}{mygauss(0.25)}%
\pgfmathtruncatemacro{\myvalC}{mygauss(0.5)}%
\pgfmathtruncatemacro{\myvalD}{mygauss(0.75)}%
%\typeout{\myvalA,\myvalB,\myvalC,\myvalD}%
\pgfdeclareradialshading{myring}{\pgfpointorigin}%
{%
color(0cm)=(transparent!\myvalA);%
color(2.5mm)=(transparent!\myvalB);%
color(5mm)=(transparent!\myvalC);%
color(7.5mm)=(transparent!\myvalD)%
}%
\pgfdeclarefading{ringo}{\pgfuseshading{myring}}%
\centering
\begin{tikzpicture}[]
\def\opacity{\MyDat[1,2,2]/12.7*0.15}
\def\lineopacity {\MyDat[1,2,2]/12.7*0}
\foreach \row in {4,...,39}{
\def\x{\MyDat[1,\row,1]}
\def\y{\MyDat[1,\row,2]}
\def\radius{\MyDat[1,\row,3]}
\path[fill=red,path fading=ringo] (\x,\y)circle[radius=\radius cm];
}
\end{tikzpicture}
\end{document}
答案2
好的,我明白了……
现在只是想知道如何定义渐变
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usepackage{forloop}
\usepackage{pgfplotstable}
\usepackage{readarray}
\usepackage{ifthen}
\usepackage[left=4cm, right=10cm, top=2cm]{geometry}
\usetikzlibrary{fadings}
\tikzfading[name=myfading, outer color=transparent!100, inner color=transparent!0]
\usepackage{filecontents}
\begin{filecontents*}{mydata.dat}
name test .dat
opacity: 10 percent
X Y Rad
0 0 0.75
0 1.8 0.75
0 3.6 0.75
0 5.4 0.75
0.75 0 0.75
0.75 1.8 0.75
0.75 3.6 0.75
0.75 5.4 0.75
1.5 0 0.75
1.5 1.8 0.75
1.5 3.6 0.75
1.5 5.4 0.75
2.25 0 0.75
2.25 1.8 0.75
2.25 3.6 0.75
2.25 5.4 0.75
3 0 0.75
3 1.8 0.75
3 3.6 0.75
3 5.4 0.75
3.75 0 0.75
3.75 1.8 0.75
3.75 3.6 0.75
3.75 5.4 0.75
4.5 0 0.75
4.5 1.8 0.75
4.5 3.6 0.75
4.5 5.4 0.75
5.25 0 0.75
5.25 1.8 0.75
5.25 3.6 0.75
5.25 5.4 0.75
6 0 0.75
6 1.8 0.75
6 3.6 0.75
6 5.4 0.75
\end{filecontents*}
\pgfplotsset{compat=1.16}
\begin{document}
\xdef \name {test.dat} %%
\readdef{\name}{\data}
\readarray\data\MyDat[-,39, 3]
\section*{\MyDat[1,1,2] }
\centering
\begin{tikzpicture}[square/.style={regular polygon,regular polygon sides=4}]
\def \opacity {\MyDat[1,2,2]/10*0.15}
\foreach \row in {4,...,39}{
\def\x{\MyDat[1,\row,1]}
\def\y{\MyDat[1,\row,2]}
\def\radius{\MyDat[1,\row,3]}
\fill[path fading=myfading, red,opacity= \opacity] (\x,\y)circle(\radius cm);
}
\end{tikzpicture}
\end{document}