Merged in plotImage (pull request #3)

plotImage
This commit is contained in:
Lars Ruthotto committed 2013-07-16 14:15:04 -07:00
commit 4e1e56b15a
31 files changed
+371 -98

No files matched your search

+1
View File
@@ -0,0 +1 @@
*.pyc
+1 -1
View File
@@ -128,7 +128,7 @@ class BaseMesh(object):
def nN():
doc = "Total number of nodes"
fget = lambda self: self.n + 1
fget = lambda self: np.prod(self.n + 1)
return locals()
nN = property(**nN())
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+1 -1
View File
@@ -23,7 +23,7 @@ class TensorMesh(BaseMesh, TensorView):
def __init__(self, h, x0=None):
super(TensorMesh, self).__init__(np.array([len(x) for x in h]), x0)
assert len(h) == len(x0), "Dimension mismatch. x0 != len(h)"
assert len(h) == len(self.x0), "Dimension mismatch. x0 != len(h)"
for i, h_i in enumerate(h):
assert type(h_i) == np.ndarray, ("h[%i] is not a numpy array." % i)
+166
View File
@@ -0,0 +1,166 @@
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from mpl_toolkits.mplot3d import Axes3D
class TensorView(object):
"""
Provides viewing functions for TensorMesh
This class is inherited by TensorMesh
"""
def __init__(self):
pass
def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True):
assert type(I) == np.ndarray, "I must be a numpy array"
assert type(numbering) == bool, "numbering must be a bool"
assert imageType in ["CC", "N"], "imageType must be 'CC' or 'N'"
assert direction in ["x", "y","z"], "direction must be either x,y, or z"
if imageType == 'CC':
assert I.size == self.nC, "Incorrect dimensions for CC."
elif imageType == 'N':
assert I.size == self.nN, "Incorrect dimensions for N."
if ax is None:
fig = plt.figure(figNum)
fig.clf()
ax = plt.subplot(111)
else:
assert isinstance(ax,matplotlib.axes.Axes), "ax must be an Axes!"
fig = ax.figure
if self.dim == 1:
if imageType == 'CC':
ph = ax.plot(self.vectorCCx, I, '-ro')
elif imageType == 'N':
ph = ax.plot(self.vectorNx, I, '-bs')
ax.set_xticks(self.vectorNx)
ax.set_xlabel("x")
ax.axis('tight')
elif self.dim == 2:
if imageType == 'CC':
C = I[:].reshape(self.n, order='F')
elif imageType == 'N':
C = I[:].reshape(self.n+1, order='F')
C = 0.25*(C[:-1, :-1] + C[1:, :-1] + C[:-1, 1:] + C[1:, 1:])
ph = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T)
ax.axis('tight')
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_xticks(self.vectorNx)
ax.set_yticks(self.vectorNy)
elif self.dim == 3:
if direction == 'z':
nX = np.ceil(np.sqrt(self.nCz))
nY = np.ceil(self.nCz/nX)
C = np.zeros((nX*self.nCx, nY*self.nCy))
Ic = I[:].reshape(self.n, order='F')
nCx = self.nCx
nCy = self.nCy
for iy in range(int(nY)):
for ix in range(int(nX)):
iz = ix + iy*nX
if iz < self.nCz:
C[ix*nCx:(ix+1)*nCx, iy*nCy:(iy+1)*nCy] = Ic[:, :, iz]
else:
C[ix*nCx:(ix+1)*nCx, iy*nCy:(iy+1)*nCy] = np.nan
C = np.ma.masked_where(np.isnan(C), C)
xx = np.r_[0, np.cumsum(np.kron(np.ones((nX, 1)), self.hx).ravel())]
yy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), self.hy).ravel())]
ph = ax.pcolormesh(xx, yy, C.T)
# Plot the lines
gx = np.r_[0, np.cumsum(np.kron(np.ones((nX, 1)), np.sum(self.hy)).ravel())]
gy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), np.sum(self.hx)).ravel())]
# Repeat and seperate with NaN
gxX = np.c_[gx, gx, gx+np.nan].ravel()
gxY = np.kron(np.ones((nX+1, 1)), np.array([0, sum(self.hy)*nY, np.nan])).ravel()
gyX = np.kron(np.ones((nY+1, 1)), np.array([0, sum(self.hx)*nX, np.nan])).ravel()
gyY = np.c_[gy, gy, gy+np.nan].ravel()
ax.plot(gxX, gxY, 'w-', linewidth=2)
ax.plot(gyX, gyY, 'w-', linewidth=2)
if numbering:
pad = np.sum(self.hx)*0.04
for iy in range(int(nY)):
for ix in range(int(nX)):
iz = ix + iy*nX
ax.text((ix+1)*self.vectorNx[-1]-pad,(iy)*self.vectorNy[-1]+pad,
'#%i'%iz,color='w',verticalalignment='bottom',horizontalalignment='right',size='x-large')
fig.show()
return ph
def plotGrid(self):
"""Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions."""
if self.dim == 1:
fig = plt.figure(1)
fig.clf()
ax = plt.subplot(111)
xn = self.gridN
xc = self.gridCC
ax.hold(True)
ax.plot(xn, np.ones(np.shape(xn)), 'bs')
ax.plot(xc, np.ones(np.shape(xc)), 'ro')
ax.plot(xn, np.ones(np.shape(xn)), 'k--')
ax.grid(True)
ax.hold(False)
ax.set_xlabel('x1')
fig.show()
elif self.dim == 2:
fig = plt.figure(2)
fig.clf()
ax = plt.subplot(111)
xn = self.gridN
xc = self.gridCC
xs1 = self.gridFx
xs2 = self.gridFy
ax.hold(True)
ax.plot(xn[:, 0], xn[:, 1], 'bs')
ax.plot(xc[:, 0], xc[:, 1], 'ro')
ax.plot(xs1[:, 0], xs1[:, 1], 'g>')
ax.plot(xs2[:, 0], xs2[:, 1], 'g^')
ax.grid(True)
ax.hold(False)
ax.set_xlabel('x1')
ax.set_ylabel('x2')
fig.show()
elif self.dim == 3:
fig = plt.figure(3)
fig.clf()
ax = fig.add_subplot(111, projection='3d')
xn = self.gridN
xc = self.gridCC
xfs1 = self.gridFx
xfs2 = self.gridFy
xfs3 = self.gridFz
xes1 = self.gridEx
xes2 = self.gridEy
xes3 = self.gridEz
ax.hold(True)
ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2])
ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2])
ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2])
ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2])
ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2])
ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2])
ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2])
ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2])
ax.grid(True)
ax.hold(False)
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.set_zlabel('x3')
fig.show()
+1
View File
@@ -0,0 +1 @@
from TensorMesh import TensorMesh
View File
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
View File
File renamed without changes.
-96
View File
@@ -1,96 +0,0 @@
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
class TensorView(object):
"""
Provides viewing functions for TensorMesh
This class is inherited by TensorMesh
"""
def __init__(self):
pass
def plotImage(self, I):
if self.dim == 1:
fig = plt.figure(1)
fig.clf()
ax = plt.subplot(111)
if np.size(I) == self.n[0]:
print 'cell-centered image'
xx = self.gridCC
ax.plot(xx[0], I, 'ro')
elif np.size(I) == self.n[0]+1:
print 'nodal image'
xx = self.gridN
ax.plot(xx[0], I, 'bs')
fig.show()
def plotGrid(self):
"""Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions."""
if self.dim == 1:
fig = plt.figure(1)
fig.clf()
ax = plt.subplot(111)
xn = self.gridN
xc = self.gridCC
print xn
ax.hold(True)
ax.plot(xn, np.ones(np.shape(xn)), 'bs')
ax.plot(xc, np.ones(np.shape(xc)), 'ro')
ax.plot(xn, np.ones(np.shape(xn)), 'k--')
ax.grid(True)
ax.hold(False)
ax.set_xlabel('x1')
fig.show()
elif self.dim == 2:
fig = plt.figure(2)
fig.clf()
ax = plt.subplot(111)
xn = self.gridN
xc = self.gridCC
xs1 = self.gridFx
xs2 = self.gridFy
ax.hold(True)
ax.plot(xn[:, 0], xn[:, 1], 'bs')
ax.plot(xc[:, 0], xc[:, 1], 'ro')
ax.plot(xs1[:, 0], xs1[:, 1], 'g>')
ax.plot(xs2[:, 0], xs2[:, 1], 'g^')
ax.grid(True)
ax.hold(False)
ax.set_xlabel('x1')
ax.set_ylabel('x2')
fig.show()
elif self.dim == 3:
fig = plt.figure(3)
fig.clf()
ax = fig.add_subplot(111, projection='3d')
xn = self.gridN
xc = self.gridCC
xfs1 = self.gridFx
xfs2 = self.gridFy
xfs3 = self.gridFz
xes1 = self.gridEx
xes2 = self.gridEy
xes3 = self.gridEz
ax.hold(True)
ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2])
ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2])
ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2])
ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2])
ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2])
ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2])
ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2])
ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2])
ax.grid(True)
ax.hold(False)
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.set_zlabel('x3')
fig.show()
+201
View File
@@ -0,0 +1,201 @@
{
"metadata": {
"name": "exPlotImage2D"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import sys\n",
"sys.path.append('../')\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from SimPEG import TensorMesh"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test 1D Plots\n",
"\n",
"For 1D nodal or cell-centered plots are supported.\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x0 = np.zeros(1)\n",
"h = np.random.rand(51)\n",
"mesh = TensorMesh([h],x0)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sin = lambda x: np.sin(x)\n",
"xc = mesh.gridCC\n",
"xn = mesh.gridN\n",
"\n",
"fig = plt.figure(1)\n",
"fig.clf()\n",
"ph1 = mesh.plotImage(sin(xc),ax=subplot(111))\n",
"ph2 = mesh.plotImage(sin(xn),ax=subplot(111),imageType='N')\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEECAYAAADHzyg1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8G+Wd8L+S5fs+40uXLee2c5NAwTYUYloXWrr0oGe2\ndJdueUl2t+3u20KKKLBlt+XdktCltNtu2mW33Ra6peAWEg7bIZCLHHYcJ7FkjUa+7fi+ZMvS+4cj\nRzZ2YseSZsbR9/PJJ/b48Tw/j2bm9zy/U+XxeDyECBEiRIgQgFpqAUKECBEihHwIKYUQIUKECDFF\nSCmECBEiRIgpQkohRIgQIUJMEVIKIUKECBFiipBSCBEiRIgQU2ikFsCLSqWSWoQQIUKEUBz+ziqQ\n1U7B4/Hw6KOP4vF4PvD1lY6VlDwKeC79u/z1+sL/w8Pbt/NoSQkPb99O1auvXvE8V5prPuOvJudC\nxgVqPt+x3v8f3r596ur5/nukrGxR12I+v7NQua82/lquw0LHVr366gfuK13yPT733qPT7sOSkkc/\ncI6Zn8G1XNsrXdPFXu8rjZvvz+YaN/vz+iiJfJwSSkiMWklJyaOUlDzKl7989bn88Tddy9+xmPNf\nizyPlpTwKHALt/pcP/8jm51CIOhusPBE7f6p7x+2WgEoLi+XSiRZsn3nTh5+912eHBycOvadvDzu\nfOghCaWSJ9UVFby+axdPXrqXAB4+dgx33wYJpVoa9PEHqgBGzVRVmS8dNc85/nphxw4zlZWVePpT\nUKGnhayAzrcklILBAGfOmMnIgKamSlJSzHj6a7i1p37auCetVnbv3RtSCjMoNhggLIzdH/4wYS4X\nE2fOcOenPhW6TrOwf8+eaQoB4MmeHn4WFjJ/hggMggB2eymTCtJ86aiZRE7RF4D5ZKcUSktLZ/36\nSsd++lMz6elQXQ2vvlrJt79dylezNvB4j/0DY8NGR+c8z0Jlme/vXsu4QM3nO3bqd3bvpnj3boq/\n8Y3J7/ftg5dfnvP81/K3+ePvXOhnFoixGqdz1p9HRbtRDTZe2tDPft7ZrsdMGRZ73yzmZ/4+/1zj\nDAZ47z0z6zmJUxdBUo6ZU6cE+qbecAuT0R9/05XGBuL8Cx9f6vP/5NdJyZ+kr2dBU84Pj0xYjChv\nv+3xbN586ZumJs+t6TWeT0R82eOBD/x7pKzMH+IuHY4c8Xhycjye4eHLx3p7PZ6EBI+nu1s6uWTK\nw9u3z3pfrcl8y5OT9c3ZfuQpKXlUarFlhcXi8WTH93ncn/r01LGSkkdD124OrnRtAvEKl91OYb5U\nV1Swf88eNE4nB8SvsWrLRvjxATCbebB0L4+deZqHx9+ZttX/Tn7+dW8n37HDjCD4HKg5DekfxfA3\n/8y+febJY4mJcMcd8Pvfw/33SyClfNm+cycPW63T7quH9DciXvwQd91dRXOzGYBDVS62rBokIiMJ\ng0EaWeVK1cs9FDvfQvXPT0ktiiLo674Y1PkUqRRmOvte4Wk8TX9D9Zk2iquq+Pjy1ewyQP4//oLd\nf3iMsKoqJm6/nTsfeui6t5MLAj5OvEv0AFkzjn3+8/DssyGlMIPi8nIYH2f3Jz9J2M03MxETQ3/y\nXr6UGsGzz5qnxt29xsLnM9/kM28+IJ2wMqXqubOUlKrAaJw6ZjAA7u/ifvcwhzw3cfPNoFJx3SvU\n6ooKuhssQZ1TkUrB19nXQTpW8jk8Xs33tB+mePVqNMADD8CRM8U8/+aboNdPvuBMJmkFVxIf+cik\nQmhuhpwcqaWRFcV5eRQvXw7V1Tidk7dXZeX0MSX3pFD1w3A+Mz4O4eGSyClLTp2iqlHH//2vommH\np3apH/84q9//O/bsSWTduuCLJzf279nDraPnqeZLjBGBiUkFISSnYDAUUVXl/zlllacwX3ydfQe4\ng1t5m3BcU05kgL/6K/jtb6G3F1i/Hk6dkkBS+THvrWhUFNxzD/zP/wRWICVSWwtFky+1//mfydtr\n5crpQ0rvSeHPnlt4ZNs2zKWlPFJWRnVFhQTCSk91RQWPlJVhLi3loZIv0R+ZyMot8bMP/tjHKAqr\no6YmuDLKFY3TyT7saLmfn9FMJVVUUsWOou7LitTfcwbkrAHGFRk59fXrlLGdyVyEiaioqeOZmXDn\nnfDLX8Iur1K4996gyyonrrQVfe89+Pu/h/vug82bJ7fuO5o0CL99G/7YP22swUDAbkhFUFsLhYV4\nPLBnD3zvex8c0t9cQev4zew84SCDTuD6zJOZaer9T77AG7HvcPBPntmvQ3k5hTt/Qe3prfDFsCBL\nKz9ckZH0kcAJNlLC5W2B77vO3yhyp7B9504ezs/HjYr9bKeM1/lOfj53zHAiP/gg/Nu/gbsotFOA\nya2ocXRk1p+tWwdxcfC5z8Hy5fDd78LZ7kyqBl+hqso87d80R/X1SE0NFBby3nvQ1ze5+JjJmz/e\nw4c971BN8dSxJ61WDuzdG0RBpWdmXkcVJTw49Ke5r0N2NkU5F6k5GIgIfGWxY4eZitblmDQfJZyH\n+Sg3UEoJRfGFH3jX+RNF7hSKy8uho4MH/vrfGA938R/Fy2d1In/oQ5NWkDeHt3HHqVDUUeWRaEbp\nI5zPocFFBGNEMUpUYhSrV6/ne9+Dxx6D48fh17+G0zWhhKxZubRT2PMwPPQQqGdZWmmcTkqooooS\n7uWlqeO+Js7rgZl5HVWUsItneGk0dc7fKfqYjtqfh3YJggCnai8rT+8+Yb0hsAEzilQKAMVpabxn\n/Br3bc/l8Wdfm3WMSjW5W/jxS5ncMTgInZ2Qnh5kSeWBIIC97w9T348DI8B6SrllGzx+yRykUsGW\nLZP/TpwgII4sRdPTA729NIUb2b8ffvrT2Ye5IiMppZKv8u/Tjgdy2y9HfE29LWTRQzJrqOO3Udvn\n/B3dF4oZ3Kvm4kVInVt3XLckpgT2oijSfATA6dO87iyhrOzKwz7/eTh4UIW4cjucPh0c2RSELSo6\noFvRJceZM7BmDT/5qZrPfx4SEmYftn3nTv43rw87ei6SAjCriXOp4zX1wuQu4RYO8kh+3hWvg2rj\nBgrD6qn9c1OwxAzhg2J3CkMnznOsQ8+tt155XGwsfPGL8JNDf8U/nToFt98eHAEVQkqB6bpyfC6a\n2lpGV23gZz+bLKsyF95r+tvP1fF1150sv+XidZkn4/17d3/mM/w55l5SUtq58+lnrnwd1GoKTcPU\nvNRA6RdygyRpCC+KVQqVR6LZXOgkLu7qMeBf/zrc8h838+jxF4i86ujriyttRScTh8wwMkzd8RHS\nV6SSkXGdJxTV1PCbsb9g40ZYseLKQ4vLy/nqQ4O0/+BmHv/z1yZtc9chxbffTvHEBC+m3MPPfq1m\nwzwKyhaVJPP+y82BFy7EB1CmUhge5vX2dZR9PXpew5cvh3Wrx/ndwUy+EGDRlhK+Yad/lfo0Z7rT\nKc34Ba7WSKorKq67VS+Ap6aWPV0/4Mln5je+tDyOr//LLWCzQV5eYIWTKxcu0J67ibZ2tTe946oU\nfnI5+346PhnelZgYWPlkisEA9nP/gLtvEOPWjGnHA4kylcKZM7yuKefXH5l/hMKD34zmqU99ki+M\njED0/JTJUsK76q95d4jcZWOk5Cf7HL8y1RUVDIwfJab7rzG3T3qer8eYezweDp2OYzAr5qq+LC+b\nN4PVk0fPwTdIvl6VwpkzVKfdw80rIWyej2zhDdHUqdbg/vMrqD/76cDKJ1P27TPzpQ213Lr+LH/5\n2meCNq8iHc3CW430qpJZv37+v/OxT4TTotFy4sXGwAkmY/btM1NZaSZJtYuXnvkqlZWT388nCW3/\nnj08M1DJSTZM9Xq6HmPuEUX2uB/koV1hs4ahzkZ4OGzVtnDwT/1XH7xUOXOGKvctFBdffaiXxERI\nTXTR+JujgZNLATQ4IinYEtydkiKVwuv74Y7VLfN+MGFyhfK1wkP820+v3/jnsWEXzWPp6G9d2IpV\n43SyjA6iGMWOfur49RZz73irgTdcpXz5ywv7vZJtTqqOxQZGKCVw5gxVbSsoKVnYrxVtCKPmrS6Y\nmAiMXAqgoTedgtt0QZ1TmUqhJpuyOxZ+o9z/iW5eOqajJxCNKRSA/aBIjqadiOSFvaC8seYbOcEJ\nNk4dv95i7p/7ZTRfLDw9ZxjqXJR+IpmqpuvUdAR0nW7GfjGOjRuvPtaXoq0x1MZshcOHAyOYzOlu\nGmZsIoyMm4JbyFNxPoXxMQ9vda/juS+OL/h3/+HQSSLcdWzZkkKuT6Tb9VLLx/pOK/lJscDCVh7e\nHgIbrSc4yQY+yf9ed70pRkbg3w+v5dD33lrw7265O4vz4/H0WbtIzE8LgHQyZmiIg6353FSqQrPA\nt01hIfwuqRhe+c/J8gTXGQ37bRREq1BFrg7qvIpTCkde6cAY1sGyNYUL/l1hMI2O8SfosML0Nrtm\nf4knaywn+8nPXfhH7nUm7/0/b3C65aNwa9l1F3P/61/DlvBTFNxhWNDveZsaaTSD3HI7pOjjgOtn\nIcLZs1Qn3kVJ6cKNEkVF8K2LWTzy7LNoDh/GFRnJ9p07r5v7ruFQBwXLYoI+ryKUgm+3MKF+BLdm\ngNLSjIU/WAtdqiwxrBfcmDZf2zUoLi9Hr9Kz7ePLePy12cuKLDV877vjxyF/uJbSXWsw5L087/vO\nt6lRrwAI3p/M7/cVz5kzVE3cyrML9CcAtDX8ibaLt/Jtj4fYqusv6q2hdoTlBcGPlFTEW3K2bmGO\nKrhuHiw/YW2LoXhT8jX97o4dZgTrBF0uNzfdFE5ExOTxpbzinXnf1QAcBNTmWceH+CC9xy00DH6e\nzZsX/rtv/dszrPVkcZbVbOE4MBn1tnvv3utDKQjhfOT+OfpOBBBFKIUQfmB8HMtgJqbi7GLine truncated
"text": [
"<matplotlib.figure.Figure at 0x10b3f14d0>"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test 2D Plots\n",
"\n",
"Plot x and y coordinates of cell-centred points"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x0 = np.zeros(2)\n",
"h1 = np.linspace(.1,.5,3)\n",
"h2 = np.linspace(.1,.5,5)\n",
"mesh = TensorMesh([h1,h2],x0)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig = plt.figure(1)\n",
"fig.clf()\n",
"ax1 = subplot(121)\n",
"ax2 = subplot(122)\n",
"mesh.plotImage(mesh.gridCC[:,0],ax = ax1)\n",
"ax1.set_title('x coordinates') \n",
"mesh.plotImage(mesh.gridCC[:,1],ax = ax2)\n",
"ax2.set_title('y coordinates') "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 12,
"text": [
"<matplotlib.text.Text at 0x10b3d0f90>"
]
},
{
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAETCAYAAAA23nEoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGVVJREFUeJzt3XtwVOX9x/HPRlIMoCEkEeyAidFIEiABciNcYytgJ5VL\ny4jRosLghLZyLYxFy7A4SjuiAqYKkbGtlMvQAgW8VApNkyhIEm4/IMAgkZUKFAhikHAxDM/vD44L\nkQSScE422bxfMzvuyXnynO/ufA+f3SdnV5cxxggA0OwF+LoAAEDjQCAAACQRCAAAC4EAAJBEIAAA\nLAQCAEASgeCXIiMjlZubK0maPXu2nnnmGR9XBNw6+tp5LXxdAOzncrm8959//nnb5g0ICNDBgwcV\nFRVl25xAbdHXzuMdQhN26dKlBj8mn2OE0+hr3yEQ6qC0tFShoaHasWOHJOno0aMKDw9XQUFBtePL\nysr0+uuvq1u3bgoLC9P48eO9+9atW6eBAweqW7duWrhwoc6dO+fdt337dj399NOKjIzUjBkzdPTo\nUe++yMhIvfXWW+rdu7fatm2ry5cv69NPP9WgQYMUGRmp7OzsKjW43W6NGjVKkuTxeBQQEKDVq1cr\nNjZW8fHxWrJkiXdsUVGR0tLSFBISorS0NP3xj3/0npz9+/eXJCUkJOiOO+7Q3//+d0nSrl27NG7c\nON1zzz36zW9+o8OHD3vne+edd5SWlqbg4GDFxMR43+6jcZkzZ45GjBhR5WcTJkzQpEmTqh1PX/tx\nXxvUyaJFi0xcXJw5d+6cGTRokJk2bVqNY4cMGWJGjRplPvvsM3Px4kXzySefGGOMyc3NNffcc4/Z\nsGGDOXDggPnxj39sZs6caYwxpqKiwrRp08YsWrTInDhxwkyYMMEMGDDAO2dkZKSJi4szBQUF5sKF\nC+b06dOmVatW5t133zVHjhwxTzzxhAkMDDT//ve/jTHGuN1u84tf/MIYY8yhQ4eMy+UyI0eONIcP\nHzbr1683LVu2NOfPnzfGGLNt2zZTWFhoLl26ZDZt2mQiIiLMhg0bvMd2uVymtLTUu11WVmZCQkLM\nmjVrTHl5uZk9e7bp3bu3McaYkydPmo4dO5oDBw4YY4z54osvqvwuGo9jx46Z1q1bm6+//toYY0xl\nZaW56667zPbt26sdT1/7b18TCPUwZMgQ07VrV5OQkGC+/fbbasd8/fXXplWrVqasrOy6fRMmTDDT\np0/3bm/YsMHEx8cbY4xZvXq1SUtL8+6rqKioMk9kZKR58cUXvftXrFhh+vXr590uLS01LpfLe+LM\nnDnzuhNn27Zt3vGdO3c2//znP6t9DC+88IJ59tlnvdvfP3Hefvtt88wzz3i3L126ZO666y5z/Phx\nU1ZWZkJDQ837779f43OExuPhhx82ixYtMsYY895775kuXbpUO46+9u++ZsmoHsaOHauSkhKNHz9e\ngYGB1Y7ZtGmTIiIiFBoaet2+zZs3KzEx0budmJio3bt368yZM9q0aZN69uzp3deqVStFR0dr8+bN\n3p+lpqZ67xcVFSkhIcG7HRUVpeDg4BvW3717d+/9u+++2/vW/ciRIxo3bpzi4+N15513au7cudq1\na1eN82zcuFFLly5VSEiIQkJCFBYWpoqKChUUFCg0NFR//etfNXfuXN19992aNGmSTp48ecO64DtP\nPfWUd5llyZIl3uWY76Ov/buvCYQ6Onv2rCZNmqSxY8dq5syZOn36dLXjevfurS+++EKnTp26bl+f\nPn20detW7/bWrVu9zdq3b19t27bNu6+iokKfffaZevfu7f1ZixZXLw5LSUnRzp07vdulpaUqLy+v\n12N76aWXVFlZqQ8//FDl5eWaPHmyLl++7N0fEBBQ5Y9vP/rRj/Tkk0/q9OnT3tvZs2e969E/+clP\ntHHjRu3du1eHDh3SK6+8Uq+64LyhQ4dq165d2rNnjz744AM98cQT1Y6jr/27rwmEOpo4caJSUlL0\n9ttvKyMjQ+PGjat2XNu2bTVw4EBNmTJFBw8e1IULF7yvhoYOHarly5crNzdXBw8e1Jw5czRs2DBJ\n0sCBA1VSUqI//elPOnHihH73u98pOTm52ldkkjRo0CBt375dS5cu1dGjRzVr1qwqJ1ZdHD16VO3a\ntVNoaKjy8vK0ePHiKvsTExOrnPAjR47U6tWrtWbNGlVUVKiiokIffPCBzp49qwMHDig3N1cXL17U\nD37wA7Vs2VJ33HFHveqC84KCgvTzn/9cjz/+uFJTU9WxY8dqx9HX/t3XBEIdrF27Vv/617+0YMEC\nSdLrr7+u7du3a/ny5dWOf+edd9S1a1f99Kc/VadOnfS3v/1NkpSenq65c+dq9uzZGjZsmIYOHapp\n06ZJklq3bq3c3Fzl5+crOTlZQUFBWrp0aY01tW3bVuvXr9ef//xnpaWlKSUlpcrJ7HK5qly/fe39\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x10ac769d0>"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test 3D Plots\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x0 = np.zeros(3)\n",
"h1 = np.linspace(.1,.5,3)\n",
"h1 = np.r_[1,2,1]\n",
"h2 = np.r_[1,3]\n",
"h3 = np.linspace(.1,.5,5)\n",
"\n",
"mesh = TensorMesh([h1,h2,h3],x0)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ax1 = ax=subplot(131)\n",
"ax2 = ax=subplot(132)\n",
"ax3 = ax=subplot(133)\n",
"a1 = mesh.plotImage(mesh.gridCC[:,0],ax=ax1)\n",
"a2 = mesh.plotImage(mesh.gridCC[:,1],ax=ax2)\n",
"a3 = mesh.plotImage(mesh.gridCC[:,2],ax=ax3)\n",
"\n",
"ax1.set_title('x coordinate')\n",
"ax2.set_title('y coordinate')\n",
"ax3.set_title('z coordinate')\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"/Users/larsruthotto/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.py:362: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n",
" \"matplotlib is currently using a non-GUI backend, \"\n"
]
},
{
"output_type": "pyout",
"prompt_number": 2,
"text": [
"<matplotlib.text.Text at 0x10cc8ab10>"
]
},
{
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x10c7671d0>"
]
}
],
"prompt_number": 2
}
],
"metadata": {}
}
]
}