2

I have defined a function

FreeEnergy[x,y],

which I want to plot in 3D. It is a function involving numerical integrals. When I make a flattened table

a = Flatten[Table[{i, j, FreeEnergy[i, j]}, {i, 10^(-11), 10^(-10), 10^(-11)}, 
{j, 0.01, 0.1, 0.01}], 1]

I get triples of numbers, like so:

a = {{1/100000000000, 0.01, 418.254}, {1/100000000000, 0.02, 332.037}, 
{1/100000000000, 0.03, 290.103}, {1/100000000000, 0.04, 263.607}, 
{1/100000000000, 0.05, 244.735}, {1/100000000000, 0.06, 230.324}, 
{1/100000000000, 0.07, 218.805}, {1/100000000000, 0.08, 209.294}, 
{1/100000000000, 0.09, 201.249}, {1/100000000000, 0.1, 194.315}, 
{1/50000000000, 0.01, 131.97}, {1/50000000000, 0.02, 104.813}, 
{1/50000000000, 0.03, 91.6048}, {1/50000000000, 0.04, 83.2588}, 
{1/50000000000, 0.05, 77.3145}, {1/50000000000, 0.06, 72.7753}, 
{1/50000000000, 0.07, 69.1469}, {1/50000000000, 0.08, 66.1511}, 
{1/50000000000, 0.09, 63.6171}, {1/50000000000, 0.1, 61.4331}, 
{3/100000000000, 0.01, 67.3045}, {3/100000000000, 0.02, 53.4881}, 
{3/100000000000, 0.03, 46.7681}, {3/100000000000, 0.04, 42.522}, 
{3/100000000000, 0.05, 39.4977}, {3/100000000000, 0.06, 37.1882}, 
{3/100000000000, 0.07, 35.3422}, {3/100000000000, 0.08, 33.818}, 
{3/100000000000, 0.09, 32.5288}, {3/100000000000, 0.1, 31.4176}, 
{1/25000000000, 0.01, 41.7954}, {1/25000000000, 0.02, 33.2413}, 
{1/25000000000, 0.03, 29.0808}, {1/25000000000, 0.04, 26.4519}, 
{1/25000000000, 0.05, 24.5794}, {1/25000000000, 0.06, 23.1496}, 
{1/25000000000, 0.07, 22.0066}, {1/25000000000, 0.08, 21.0629}, 
{1/25000000000, 0.09, 20.2647}, {1/25000000000, 0.1, 19.5767}, 
{1/20000000000, 0.01, 28.9173}, {1/20000000000, 0.02, 23.0198}, 
{1/20000000000, 0.03, 20.1513}, {1/20000000000, 0.04, 18.3388}, 
{1/20000000000, 0.05, 17.0478}, {1/20000000000, 0.06, 16.062}, 
{1/20000000000, 0.07, 15.2739}, {1/20000000000, 0.08, 14.6233}, 
{1/20000000000, 0.09, 14.0729}, {1/20000000000, 0.1, 13.5985}, 
{3/50000000000, 0.01, 21.4262}, {3/50000000000, 0.02, 17.0739}, 
{3/50000000000, 0.03, 14.9569}, {3/50000000000, 0.04, 13.6192}, 
{3/50000000000, 0.05, 12.6664}, {3/50000000000, 0.06, 11.9388},
{3/50000000000, 0.07, 11.3572}, {3/50000000000, 0.08, 10.877}, 
{3/50000000000, 0.09, 10.4708}, {3/50000000000, 0.1, 10.1206}, 
{7/100000000000, 0.01, 16.6463}, {7/100000000000, 0.02, 13.2798}, 
{7/100000000000, 0.03, 11.6423}, {7/100000000000, 0.04, 10.6075}, 
{7/100000000000, 0.05, 9.8705}, {7/100000000000, 0.06, 9.30765}, 
{7/100000000000, 0.07, 8.85772}, {7/100000000000, 0.08, 8.48621}, 
{7/100000000000, 0.09, 8.17195}, {7/100000000000, 0.1, 7.90109}, 
{1/12500000000, 0.01, 13.3903}, {1/12500000000, 0.02, 10.6953}, 
{1/12500000000, 0.03, 9.3843}, {1/12500000000, 0.04, 8.55586}, 
{1/12500000000, 0.05, 7.96575}, {1/12500000000, 0.06, 7.51509}, 
{1/12500000000, 0.07, 7.15484}, {1/12500000000, 0.08, 6.85736}, 
{1/12500000000, 0.09, 6.60572}, {1/12500000000, 0.1, 6.38882}, 
{9/100000000000, 0.01, 11.0619}, {9/100000000000, 0.02, 8.84689}, 
{9/100000000000, 0.03, 7.76938}, {9/100000000000, 0.04, 7.08843}, 
{9/100000000000, 0.05, 6.60336}, {9/100000000000, 0.06, 6.2329}, 
{9/100000000000, 0.07, 5.93675}, {9/100000000000, 0.08, 5.6922}, 
{9/100000000000, 0.09, 5.48532}, {9/100000000000, 0.1, 5.307}, 
{1/10000000000, 0.01, 9.3328}, {1/10000000000, 0.02, 7.4742}, 
{1/10000000000, 0.03, 6.56999}, {1/10000000000, 0.04, 5.99852}, 
{1/10000000000, 0.05, 5.59142}, {1/10000000000, 0.06, 5.2805}, 
{1/10000000000, 0.07, 5.03193}, {1/10000000000, 0.08, 4.82666}, 
{1/10000000000, 0.09, 4.653}, {1/10000000000, 0.1, 4.50331}}.

Trying to plot this data with ListPlot3D returns an empty graph, while ListPointPlot3D works. Why? Help much appreciated.

drabus
  • 427
  • 3
  • 9
  • I haven't seen this problem before, but if you post a complete example (i.e. provide wither the function or the data) then someone will surely figure it out. Without any way to reproduce it, it's unlikely there will be an answer. – Szabolcs Feb 20 '15 at 14:42

3 Answers3

3

As Michael Stern states, the issue seems to be with the scale of the numbers. Rescaling the x axis allows to show the Plot. You can specify the ticks to show the actual numbers you had in the dataset.

a[[All, 1]] = 10^11 N[a[[All, 1]]]
labels = {#, # 10^-11} & /@ a[[All, 1]] // Union
(*{{1., 1.*10^-11}, {2., 2.*10^-11}, {3., 3.*10^-11}, {4., 
  4.*10^-11}, {5., 5.*10^-11}, {6., 6.*10^-11}, {7., 7.*10^-11}, {8., 
  8.*10^-11}, {9., 9.*10^-11}, {10., 1.*10^-10}}*)
ListPlot3D[a, Ticks -> {labels, Automatic, Automatic}]

Mathematica graphics

Zviovich
  • 9,308
  • 1
  • 30
  • 52
2

I have run into this before when dealing with very small numbers as you do here. One solution is to rescale your data and then, if you need to, adjust the ticks.

So if your nested list is saved under the variable name a,

ListPlot3D[a]

fails, but

a[[All, 1]] = a[[All, 1]]*10^6;
ListPlot3D[a]

works.

Michael Stern
  • 4,695
  • 1
  • 21
  • 37
2

ListPlot3D[a, DataRange -> All, PlotRange -> All] works for me.

egwene sedai
  • 2,355
  • 16
  • 24