4

I have tried to import external 3D plots from Matlab et.al, but to no avail. To show what I managed to accomplish, I present a minimum non-working example below. Any ideas of what I'm doing wrong?

Cheers, Stefanos

Makefile:

all: 3dtest.pdf

3dtest.pdf: 3dtest.tex bumps.png
    latexmk -pdflatex="xelatex -shell-escape " -pdf 3dtest.tex

bumps.png: bumps.m
    matlab -nodesktop -nosplash -r "bumps;exit"
    sleep 1
    reset
    convert bumps.png -trim +repage -transparent white bumps.png

bumps.m (don't bother running this with Octave, saving the surface plot is for some reason incredibly slow, and the result isn't very good):

function bumps()
  figure(1)
  [X,T]=meshgrid(linspace(0,1,400),linspace(0,2,400));
  c=[3 2 5 4];
  surf(X,T,abs(sin(c(1)*pi*X).*exp(1j*c(2)*pi*T)+sin(c(3)*pi*X).*exp(1j*c(4)*pi*T)))
  shading interp
  colormap(jet(1000))
  axis off
  setPapersize(6*[4 3])
  print -dpng bumps
end

function setPapersize(papersize)
  set (gcf,'papertype', '<custom>')
  set (gcf, 'papersize', papersize)
  set (gcf, 'paperposition', [0 0 papersize])
end

3dtest.tex:

\documentclass{standalone}
\usepackage{tikz,pgfplots}

\begin{document}

\begin{tikzpicture}
  \begin{axis}[width=10cm]
    \addplot3 graphics[points={
      (0,0,0) => (1212,0)
      (1,0,0) => (2791,428)
      (0,2,0) => (0,557)
      (0.8872,2,1.854) => (1398,2064)
      (1,2,2)
    }] {bumps};
  \end{axis}
\end{tikzpicture}

\end{document}

The resultant image:

Image

EDIT: Original image:

Image

FYI, I'm on Texlive 2012, using XeLaTeX (as seen in the Makefile).

  • How did you determine the mapping of the points to the pixels of the image? Could you upload the image? – Jake Aug 07 '12 at 20:15
  • Just as specified in the manual, measuring from the lower left corner in Gimp. The first three 3D coordinates are trivial, and the last one was checked in Matlab. – Stefanos Carlström Aug 08 '12 at 04:15
  • It works fine for me. What version of PGFPlots are you using? – Jake Aug 08 '12 at 07:12
  • @Jake: The default one that's delivered with Texlive 2012, i.e. 1.5.1, which also seems to be the last released one, albeit released in December. You didn't have to change anything? – Stefanos Carlström Aug 08 '12 at 18:14
  • I have now also tried the latest Git revision, and inserted the following, as suggested by Pgfplots during compilation: \pgfplotsset{compat=1.6}. No difference. – Stefanos Carlström Aug 08 '12 at 19:46
  • I didn't change anything, and I'm also using version 1.5.1 of PGFPlots. – Jake Aug 09 '12 at 08:06
  • @Jake: That's very weird. I have no clue as to what I should do. – Stefanos Carlström Aug 10 '12 at 16:35
  • It works for me with pdflatex and both pgfplots 1.5.1 and latest git revision. However, it fails utterly with xelatex (XeTeX 3.1415926-2.3-0.9997.5 (TeX Live 2011)) which produces a strange dimension too large and does not generate any image inside of the axis at all (for both mentioned pgfplots revisions). Does it work if you use pdflatex? I will look into the xelatex problem. – Christian Feuersänger Aug 14 '12 at 17:38

2 Answers2

3

I found that it works on my system with both TL 2011 and TL 2012 and with both pdflatex and xelatex -- provided I use the .png version of the image. xelatex failed to compile with .jpg (which is the format of the graphics in the question); pdflatex worked everytime.

My guess is that something is wrong with the installation on your system; although I could not find what according to your .log files (send by private email).

  • Sorry for not answering earlier, I've been on holidays. I will try this out pronto. – Stefanos Carlström Sep 02 '12 at 12:53
  • Well, it depends on what you mean with "manage to compile the expression". I definitely get an image included, but approximately a factor five larger than the axis object. While researching the bb file solution (which I could not get to work by the way), I found out that the bb in the dvipdfm format differed from that in the dvipdfmx format, by a factor of 2/3. By scaling the coordinates manually, I got the plot to fit, but with a factor 0.4825. I have not been able to succeed with any of {PDF,Xe,Lua}LaTeX, I did not see any difference. Cheers, – Stefanos Carlström Sep 02 '12 at 13:42
  • Thanks for the experiment. I have the impression that your result is different from mine (I believe mine did not even compile in xelatex). I can offer more detailed advice (hopefully a bugfix) if we continue the discussion per mail (my address is listed on top of the pgfplots manual). – Christian Feuersänger Sep 02 '12 at 17:21
2

the same without MatLab. Run with xelatex or latex->dvips->ps2pdf

\documentclass[pstricks]{standalone}
\usepackage{pst-solides3d}
\begin{document}

\psset{Decran=60,viewpoint=20 70 15 rtp2xyz}
\begin{pspicture}(-7,-5)(5.5,6.5)
\psSurface[ngrid=0.02 0.02,linewidth=0.2pt,axesboxed,algebraic,
   grid=true,showAxes=false,
   tablez=0 0.1 2 { } for, zcolor=0.5 1 1 0.03 1 1 (hsb), 
   Zmin=0,Zmax=2](0,0)(2,4)%
 {sqrt((sin(3*Pi*x/2)*cos(2*Pi*y/2)+sin(5*Pi*x/2)*cos(4*Pi*y/2))^2+
        (sin(3*Pi*x/2)*sin(2*Pi*y/2)+sin(5*Pi*x/2)*sin(4*Pi*y/2))^2 )}
\end{pspicture}

\end{document}

enter image description here

  • Thanks for the effort, but the main reason I want to use external graphics, is the need to include high resolution data (compilation slow or nigh impossible, if done in LaTeX). – Stefanos Carlström Sep 09 '12 at 08:29
  • that image is not created inside LaTeX, it is done by PostScript when running dvips –  Sep 09 '12 at 08:40
  • Sorry, should have read more carefully. Will try that. EDIT: Having trouble finding out how to specify numerical data (i.e. list of data points). – Stefanos Carlström Sep 09 '12 at 09:02