carrapatos sob tikz

carrapatos sob tikz

Aí está meu código mínimo

\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}

e lá está minha figura

insira a descrição da imagem aqui

Quero modificar duas coisas nesta figura: (1) primeiro (e o mais importante) não quero esse pseudo tick "10^-2" no topo da figura, gostaria de ter números decimais (0,002, 0,004, 0,006) como rótulo y. (2) em segundo lugar (isso é menos importante) eu gostaria de ter uma barra de erro apenas para x=-4 e x=4 (por exemplo).

Responder1

Observe pelos comentários que se você tivesse feito uma das perguntas individuais (ou ambas em postagens separadas), provavelmente teria obtido resposta(s) para sua(s) pergunta(s) no dia em que fez a pergunta.

Para o primeiro problema, use scaled y ticks=false. Isso é necessário porque você zera o tickrótuloscom yticklabels={,,}(a propósito, eu preferiria yticklabels=\empty: funcionará independentemente de quantos ticks estiverem no gráfico), mas os próprios ticks ainda estão colocados, o que significa que a escala pode estar em vigor.

Se você quiser que as marcas de seleção desapareçam, basta usar ytick=emptyno lugar de scaled y ticks=false,yticklabels={,,}.

Para as barras de erro, a solução rápida e suja é remover as entradas indesejadas da tabela. Mas presumo que seu caso de uso real tenha muito mais entradas. Podemos criar uma nova coluna (chamada error-proc) na tabela \expcom

\pgfplotstablecreatecol[
  <assignments>
]
{error-proc}{\exp}

A <assignments>parte aqui é focada em capturar apenas a primeira e a última linhas errore copiar apenas esses elementos em nossa nova coluna 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}

Depois é só mudar y error=errorpara y error=error-procno seu \addplotcomando:

\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}

insira a descrição da imagem aqui

informação relacionada