Como faço para traçar um gráfico semelhante a imagens do Matlab puramente em látex

Como faço para traçar um gráfico semelhante a imagens do Matlab puramente em látex
for i = 1:length(RVs) 
    for j=1:length(MVs)
      load(data)% load some data.
      sumRRE(j) = mean((RRE< 1e-10));
    end  
    RREs(:,i) = sumRRE;
    clear summRRE;  
end
 % in the end RREs is a matrix of 9-by-10
RV = [10:10:100]; % x-axis
MV = 0.1:0.1:0.9; % y- axis
 
imagesc(RV,MV,RREs);
colorbar()

O código a seguir funciona em Matlab. mas estou me perguntando se posso fazer o mesmo em látex, pois os gráficos de látex são muito melhores. Minha matriz RREs tem dimensão de 9 por 10. Abaixo está minha tentativa, mas não funciona. Aqui está umlinkpara o arquivo de dados para tentar. Desde já, obrigado.

    \documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    xlabel={Missing Value Prop},
    ylabel={Rendezvous Prop},
    xtick={10, 20, ..., 100},
    ytick={0.1, 0.2, ..., 0.9},
    y dir=reverse,
    colormap={mycolormap}{color=(white) color=(blue)},
    colorbar,
    point meta min=0,
    point meta max=1,
]
\addplot[matrix plot*, mesh/rows=9] table [x index=0, y index=1, meta index=2] {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}

Responder1

Você precisa especificar os valores xey na tabela, portanto, o formato da tabela deve ser x y Cem vez de uma matriz C (aqui sua matriz RREs). Adicionei algumas linhas ao seu código Matlab para transformar os dados no formato correto para látex.

(Não consegui executar seu código Matlab, pois há variáveis ​​indefinidas, mas carregar seus dados vinculados me permitiu pular completamente o loop.)

load("data2.dat")
RREs = data2;

% in the end RREs is a matrix of 9-by-10
RV = 10:10:100; % x-axis
MV = 0.1:0.1:0.9; % y- axis

figure(1)
colormap(flipud(gray))
imagesc(RV,MV,RREs);
colorbar()

% Transform the data into table format for Latex
[X,Y] = meshgrid(RV,MV);
data_table = [reshape(X',[],1), reshape(Y',[],1), reshape(RREs',[],1)];
writematrix(data_table,"data_trafo.dat","Delimiter",'\t')

Com isso, seu código quase funciona bem. Eu apenas adicionei a opção point meta=explicitpara que o latex espere e use os dados numéricos fornecidos.

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    xlabel={Missing Value Prop},
    ylabel={Rendezvous Prop},
    xtick={10, 20, ..., 100},
    ytick={0.1, 0.2, ..., 0.9},
    y dir=reverse,
    colormap={mycolormap}{color=(white) color=(blue)},
    colorbar,
    point meta min=0,
    point meta max=1,
]
\addplot[matrix plot*, mesh/rows=9, mesh/cols=10,point meta=explicit] table [x index=0, y index=1, meta index=2] {data_trafo.dat};
\end{axis}
\end{tikzpicture}
\end{document}

Isso deve resultar em algo assim. Espero que isto seja o que procuras. insira a descrição da imagem aqui

informação relacionada