Jag försöker skapa en värmekarta med tikz / pgfplots i latex, men jag får dock en tom tomt. Jag använder samma kommando som jag använde i GNUplot, vilket var

plot "heat-data.txt" matrix with image; 

I GNUplot resulterar detta i önskad bild Bild skapad med GNUplot där ”heat-data.txt” en fil innehåller z-koordinaterna.

6 5 4 3 1 0 3 2 2 0 0 1 0 0 0 0 1 0 0 0 0 0 2 3 0 0 1 1 1 0 0 1 0 1 1 0 

Eftersom jag vill skapa värmekartor över datamängder i en rapport vill jag göra detta i samma stil som resten av rapporten och därför använda Tikz / Pgfplots. Jag har försökt

\addplot3[raw gnuplot] gnuplot{ set view map; plot "heat-data.txt" matrix with image}; 

vilket resulterade i Genererad bild

och har försökt

\addplot3[raw gnuplot,surf,shader=flat]gnuplot{ plot "heat-data.txt" matrix with image; }; 

vilket resulterade i ange bildbeskrivning här

MWE:

\documentclass[tikz, crop]{standalone} \usepackage{tikz} \usepackage{pgfplots} \pgfplotsset{compat=newest} \pgfplotsset{plot coordinates/math parser=false} \begin{document} \begin{tikzpicture} \begin{axis}[ colorbar right, colormap/viridis, view={0}{90} ] %\addplot3[raw gnuplot]gnuplot{ %plot "heat-data.txt" matrix with image; %}; \addplot3[raw gnuplot,surf,shader=flat]gnuplot{ plot "heat-data.txt" matrix with image; }; \end{axis} \end{tikzpicture} \end{document} 

Kommentarer

Svar

Jag har inte mycket erfarenhet av gnuplot. Vad jag kan erbjuda är något som konverterar dina data till något som kan plottas med en vanlig matrisplottning.

\documentclass[border=3.14mm,tikz]{standalone} \usepackage{filecontents} \begin{filecontents*}{heat-data.txt} 6 5 4 3 1 0 3 2 2 0 0 1 0 0 0 0 1 0 0 0 0 0 2 3 0 0 1 1 1 0 0 1 0 1 1 0 \end{filecontents*} \usepackage{pgfplots} \usetikzlibrary{pgfplots.colormaps} \pgfplotsset{compat=1.16} \usepackage{pgfplotstable} \newcommand*{\ReadOutElement}[4]{% \pgfplotstablegetelem{#2}{[index]#3}\of{#1}% \let#4\pgfplotsretval } \begin{document} \pgfplotstableread[header=false]{heat-data.txt}\datatable \pgfplotstablegetrowsof{\datatable} \pgfmathtruncatemacro{\numrows}{\pgfplotsretval} \pgfplotstablegetcolsof{\datatable} \pgfmathtruncatemacro{\numcols}{\pgfplotsretval} \xdef\LstX{} \xdef\LstY{} \xdef\LstC{} \foreach \Y [evaluate=\Y as \PrevY using {int(\Y-1)},count=\nY] in {1,...,\numrows} {\pgfmathtruncatemacro{\newY}{\numrows-\Y} \foreach \X [evaluate=\X as \PrevX using {int(\X-1)},count=\nX] in {1,...,\numcols} { \ReadOutElement{\datatable}{\PrevY}{\PrevX}{\Current} \pgfmathtruncatemacro{\nZ}{\nX+\nY} \ifnum\nZ=2 \xdef\LstX{\PrevX} \xdef\LstY{\PrevY} \xdef\LstC{\Current} \else \xdef\LstX{\LstX,\PrevX} \xdef\LstY{\LstY,\PrevY} \xdef\LstC{\LstC,\Current} \fi } } \edef\temp{\noexpand\pgfplotstableset{ create on use/x/.style={create col/set list={\LstX}}, create on use/y/.style={create col/set list={\LstY}}, create on use/color/.style={create col/set list={\LstC}},}} \temp \pgfmathtruncatemacro{\strangenum}{\numrows*\numcols} \pgfplotstablenew[columns={x,y,color}]{\strangenum}\strangetable %\pgfplotstabletypeset[empty cells with={---}]\strangetable \begin{tikzpicture} \begin{axis}[colorbar] \addplot [ matrix plot, point meta=explicit, ] table [meta=color,col sep=comma] \strangetable; \end{axis} \end{tikzpicture} \end{document} 

ange bildbeskrivning här

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *