
MWE:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{datavisualization.formats.functions}
\begin{document}
\begin{tikzpicture}
\datavisualization[
scientific axes={clean},
all axes = grid,
x axis = {
min value = 0,
ticks = {
major = {
also at = 1.5 as $T_0$,
at = 2 as $T_0 + T_1$
},
stack
},
label = $t$
},
y axis = {
min value = 0,
ticks = {major = {also at = 4.5 as $K$}},
label = $y(t)$
},
visualize as smooth line/.list = {
curve,
line 1,
line 2
},
line 2 = {style = dashed}
]
data[
set = curve,
format = function
] {
var x : interval[1.5 : 6];
func y = 9/2 * (1 - exp(3 - 2 * \value x));
}
data[set = line 1] {
x, y
1.5, 0
2, 4.5
}
data[set = line 2] {
x, y
2, 4.5
2, 0
};
\end{tikzpicture}
\end{document}
at = 2 as $T_0 + T_1$
다른 틱을 완전히 비활성화하고 다음을 무시합니다 also at = 1.5 as $T_0$
.
also at = 2 as $T_0 + T_1$
16번째 줄을 내가 얻는 것보다 로 바꾸면
그렇다면 자동으로 생성된 틱을 비활성화하거나 덧칠하지 않고 사용자 정의 틱 텍스트를 어떻게 얻을 수 있습니까? 두 번째 질문은 어떻게 하면 겹치지 않고 배치 T_0
할 수 있는가 하는 것입니다.T_0 + T_1
미리 여러분의 도움과 노력에 감사드립니다!
답변1
이것은 그런 종류의 작업을 수행합니다. 하나의 추가 진드기가 이전 진드기를 지우지 않으려면 키가 필요합니다 /.list
. 중복을 피하기 위해 교대근무를 사용할 수 있습니다. 그래서 전체적으로
major also at/.list={ 1.5 as $T_0$,
2 as [node style={yshift=-2em}] $T_0 + T_1$},
전체 MWE:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{datavisualization.formats.functions}
\begin{document}
\begin{tikzpicture}
\datavisualization[
scientific axes={clean},
all axes = grid,
x axis = {
min value = 0,
ticks = {
major also at/.list={ 1.5 as $T_0$,
2 as [node style={yshift=-2em,alias=pft}] $T_0 + T_1$},
stack
},
label = $t$
},
y axis = {
min value = 0,
ticks = {major = {also at = 4.5 as $K$}},
label = $y(t)$
},
visualize as smooth line/.list = {
curve,
line 1,
line 2
},
line 2 = {style = dashed}
]
data[
set = curve,
format = function
] {
var x : interval[1.5 : 6];
func y = 9/2 * (1 - exp(3 - 2 * \value x));
}
data[set = line 1] {
x, y
1.5, 0
2, 4.5
}
data[set = line 2] {
x, y
2, 4.5
2, 0
};
\draw[very thin] (pft.north) -- ++ (0,1em);
\end{tikzpicture}
\end{document}
답변2
€dit³
다음과 같은 제안pgfplots:
내 생각엔 당신도 그런 걸 원하는 것 같은데...
· 한 가지 방법은 설정입니다 . extra x ticks
" T_0+T_1
"를 참조하십시오. K
를 사용하여 " "와 동일한 게임을 합니다 extra y ticks
.
· 또 다른 방법은 특수 라벨을 주석으로 추가하는 것입니다 draw
. " T_0
", " T_1
" 및 " T_a
", " T_b
"을 참조하십시오.
라벨에 다른 눈금 길이를 사용하려면 두 번째 방법을 선호할 수 있습니다.
다음은 두 가지 방법을 모두 보여줍니다.
\documentclass[border=5pt, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{backgrounds}
\begin{document}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\begin{tikzpicture}
\pgfmathsetlengthmacro\MajorTickLength{
\pgfkeysvalueof{/pgfplots/major tick length}*0.5}
\pgfmathsetlengthmacro\AxisShift{-4.5pt}
\begin{axis}[
xmin=-0,
xmax=6.0,
ymin=0,
ymax=4.5,
%axis lines=middle,
axis y line=middle,
axis x line=bottom,
axis line style={-, gray},
major tick length=\MajorTickLength,
every tick/.style={gray},
tick align=outside,
y axis line style={xshift=\AxisShift},
every y tick/.style={xshift=\AxisShift},
yticklabel style={xshift=\AxisShift},
x axis line style={yshift=\AxisShift},
every x tick/.style={yshift=\AxisShift},
x tick label style={yshift=\AxisShift, fill=white},
ylabel={\rotatebox{90}{$y(t)$}},
xlabel={$t$},
x label style={at={(ticklabel* cs:0.975)}, inner sep=5pt, yshift=4*\AxisShift, anchor=north},
y label style={at={(ticklabel* cs:0.55)}, inner sep=5pt, xshift=3.5*\AxisShift, anchor=east},
xtick={0,...,6},
ytick={1,...,4},
extra y ticks={0,4.5},
extra y tick labels={0,$K$},
grid=major,
extra x ticks={2},
extra x tick labels={$T_0 + T_1$},
extra x tick style={major tick length=-5.25*\AxisShift, on background layer},
%enlarge y limits={abs=0.4,upper},
]
% Curve
\addplot [domain=1.5:6, samples=222, thick]{9/2 *(1 -exp(3 -2*x)};
% Line 1 as parametric plot
\addplot[dashed, variable=\t, samples=2, thick]({2},{\t}) ;
% Line 2 as table-plot
\addplot[no marks, thick,] table[x=X,y=Y] {
X Y
1.5 0
2 4.5
};
% Some special labels ===================
\begin{pgfonlayer}{foreground}
\foreach \T/\Name in {0.5/T_1, 1.5/T_0, 3.85/T_a, 4.6/T_b} {\edef\temp{\noexpand
\draw [gray, yshift=\AxisShift] (\T,0) -- (\T,2.75*\AxisShift) node[below, text=black, inner sep=2pt]{$\Name$};
}\temp}
\end{pgfonlayer}
% ================================
\end{axis}
\end{tikzpicture}
\end{document}
답변3
나는 온보드 방식으로 이 문제를 해결할 수 있는 가능성을 발견했습니다. 트릭을 수행 [{tick text padding = 'some value some measurement'}]
하려면 내 MWE를 참조하세요.clean ticks
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{datavisualization.formats.functions}
\begin{document}
\begin{tikzpicture}
\datavisualization[
scientific axes={clean},
all axes = grid,
x axis = {
min value = 0,
ticks = {
major = {
also at = 1.5 as $T_0$,
also at = 2 as [{tick text padding = 1.5em}] $T_0 + T_1$ % <--- changed !!!!!
},
%stack <--- removed !!!!!
},
label = $t$
},
y axis = {
min value = 0,
ticks = {major = {also at = 4.5 as $K$}},
label = $y(t)$
},
clean ticks, % <--- added !!!!!
visualize as smooth line/.list = {
curve,
line 1,
line 2
},
line 2 = {style = dashed}
]
data[
set = curve,
format = function
] {
var x : interval[1.5 : 6];
func y = 9/2 * (1 - exp(3 - 2 * \value x));
}
data[set = line 1] {
x, y
1.5, 0
2, 4.5
}
data[set = line 2] {
x, y
2, 4.5
2, 0
};
\end{tikzpicture}
\end{document}
그리고 그 결과