I'm trying to plot the energy dispersion of a graphene similar material. I've used the Tight Binding Function Approximation considering first neighbours and no overlaping. I have this 2 expressions of the energy:

  primera = 1/2 (A + B - Sqrt[ A^2 - 2 A B + B^2 + 12 β^2 + 8 β^2 Cos[Sqrt[3] d x] + 
 16 β^2 Cos[1/2 Sqrt[3] d x] Cos[(3 d y)/2]])
segunda = 1/2 (A + B + Sqrt[ A^2 - 2 A B + B^2 + 12 β^2 + 8 β^2 Cos[Sqrt[3] d x] + 
 16 β^2 Cos[1/2 Sqrt[3] d x] Cos[(3 d y)/2]])

I'have plotted using this expression:

Plot3D[{primera, segunda}, {x, -1.1, 1.1}, {y, -1.1, 1.1}]

enter image description here

But this will be correct if the first Brillouin Zone were a square lattice, but it isn't. It's hexagonal too so i have to plot over this geometric figure and i don't know how to do that.

I'd like to make something similar (leaving out the differences with this: http://demonstrations.wolfram.com/GrapheneBrillouinZoneAndElectronicEnergyDispersion/

I would appreciate any help about plotting over a hexagon or a link to a tutorial that explain the plotting along the high simmetry points.

Thank you very much.


  • 1
    $\begingroup$ There are folks here that probably can help you with this. But there are also others who can help you if you exactly describe what do you want to do in terms of input/output leaving as much of physics behind as you can. :) $\endgroup$ – Kuba Jan 31 '15 at 11:03

if you need the plot only in hexagonal boundaries the RegionFunction option of Plot3D would be helpful

R = 1;

f = Interpolation[ 
   Table[{a, R {Cos[a], Sin[a]}}, {a, -\[Pi], \[Pi], \[Pi]/3}], 
   InterpolationOrder -> 1];

then look what we obtained

ParametricPlot[f[a], {a, -\[Pi], \[Pi]}]

enter image description here

then we may plot some function with boundaries inside the region

Plot3D[x^2 + y^2, {x, -R, R}, {y, -R, R}, 
 RegionFunction -> 
  Function[{x, y, z}, Norm@{x, y} <= Norm@f[ArcTan[y, x]]]]

enter image description here

  • $\begingroup$ Thank you very much. That's exactly what i wanted. Now, I have the doubt that if this is physically correct but that's have not to do with Mathematica... :) $\endgroup$ – Geralt Jan 31 '15 at 13:05

In Mathematica version 10 you can directly plot over regions.

regularPolygon[nbrSides_Integer?(# > 2 &), scale_: 1] :=
 Polygon[scale {Cos[#], Sin[#]} & /@
   (2 Pi*Range[1/nbrSides, 1, 1/nbrSides])]

  Element[{x, y}, regularPolygon[n]],
  AspectRatio -> Automatic],
 {{func, x^2 + y^2, "Function"},
  {x^2 + y^2, Sin[x] + Cos[y], Sin[x*y]}},
 {{plot, DensityPlot, "Plot Type"},
  {DensityPlot, ContourPlot, Plot3D}},
 {{n, 6, "Polygon Sides"}, Range[3, 8]}]

enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.