Вот мой минимальный код
\documentclass[a4paper,11pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{float,caption}
\usepackage{microtype}
\usepackage{bbold}
\usepackage{tikz}
\usepackage{subfig}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread{
x y error
-4.0 0.0296647842303 0.0291503887869
-3.0 0.0293603640735 0.0141878426016
-2.0 0.0286685720323 0.00649661240084
-1.0 0.0275361528438 0.00210364869319
2.0 0.0266314574388 0.00148277554508
3.0 0.0277962098809 0.00421008334229
4.0 0.0291488821404 0.00849079074145
}{\exp}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-4.5,
xmax=4.5,
ymin=0,
ymax=0.06,
axis background/.style={fill=white},
ylabel=$\delta(q)$,
xlabel=moment $q$,
legend columns=3,
yticklabels={,,}
]
\addplot[color=green,thin,error bars/.cd,y dir=both, y explicit] table[x=x,y=y,y error=error] {\exp};
\end{axis}
\end{tikzpicture}
\end{document}
и вот моя фигура
Я хочу изменить две вещи на этом рисунке: (1) во-первых (и это самое важное) я не хочу видеть эту псевдогалочку "10^-2" в верхней части рисунка, я хотел бы иметь десятичные числа (0,002, 0,004, 0,006) в качестве метки. (2) во-вторых (это менее важно) я хотел бы иметь планку погрешности только для x=-4 и x=4 (например).
решение1
Обратите внимание на комментарии: если бы вы задали любой из этих вопросов по отдельности (или оба в отдельных постах), вы, скорее всего, получили бы ответ(ы) на свой вопрос(ы) в тот же день, когда задали его.
Для первой задачи используйте scaled y ticks=false
. Это необходимо, потому что вы обнуляете тикэтикеткис ( кстати, yticklabels={,,}
я бы предпочел : это будет работать независимо от того, сколько делений на графике), но сами деления все равно расставлены, а это значит, что масштабирование может иметь место.yticklabels=\empty
Если вы хотите, чтобы сами деления исчезли, просто используйте ytick=empty
вместо scaled y ticks=false,yticklabels={,,}
.
Для планок погрешностей быстрое и грязное решение — удалить нежелательные записи из таблицы. Но я предполагаю, что в вашем реальном варианте использования записей гораздо больше. Мы можем создать новый столбец (называемый error-proc
) в таблице \exp
с помощью
\pgfplotstablecreatecol[
<assignments>
]
{error-proc}{\exp}
В этой <assignments>
части основное внимание уделяется извлечению только первой и последней строк error
и копированию только этих элементов в наш новый столбец error-proc
:
\pgfplotstablecreatecol[
create col/assign first/.code={%
\getthisrow{error}\entry
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
},
create col/assign last/.code={%
\getthisrow{error}\entry
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
},
]
{error-proc}{\exp}
Затем просто измените в своей команде y error=error
на :y error=error-proc
\addplot
\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=1.12}
\pgfplotstableread{
x y error
-4.0 0.0296647842303 0.0291503887869
-3.0 0.0293603640735 0.0141878426016
-2.0 0.0286685720323 0.00649661240084
-1.0 0.0275361528438 0.00210364869319
2.0 0.0266314574388 0.00148277554508
3.0 0.0277962098809 0.00421008334229
4.0 0.0291488821404 0.00849079074145
}{\exp}
\pgfplotstablecreatecol[
create col/assign first/.code={%
\getthisrow{error}\entry
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
},
create col/assign last/.code={%
\getthisrow{error}\entry
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
},
]
{error-proc}{\exp}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-4.5,
xmax=4.5,
ymin=0,
ymax=0.06,
axis background/.style={fill=white},
ylabel=$\delta(q)$,
xlabel=moment $q$,
yticklabels=\empty,
scaled y ticks=false,
]
\addplot[error bars/.cd,y dir=both, y explicit] table[x=x,y=y,y error=error-proc] {\exp};
\end{axis}
\end{tikzpicture}
\end{document}