# Why i plot displacement arrow graph rather than cloud graph?

**URL:** <https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413>\
**Category:** Uncategorized\
**Created:** [June 3, 2020, 3:02am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413 "2020-06-03T03:02:21Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Daniel](https://avatars.discourse-cdn.com/v4/letter/d/3ec8ea/32.png) [@Daniel](https://fenicsproject.discourse.group/u/Daniel)\
**Post date:** [June 3, 2020, 3:02am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/1 "2020-06-03T03:02:21Z")

</div>

hi, everyone.  
I want to get the displacement solution and plotting it like Abaqus show. but i got arrow graph when plotting.

 ![image](https://global.discourse-cdn.com/free1/uploads/fenicsproject1/original/2X/3/38f38d5efe70c88a4c7311806fead2f010bd7bec.png)  
 ![image](https://global.discourse-cdn.com/free1/uploads/fenicsproject1/original/2X/5/51f2b6257fe76fb10266bab1a2e185b909eea062.png)

```
from dolfin import *
import numpy as np
import matplotlib.pyplot as plt
set_log_active(False)

L = 1.; H = 1.
Nx = 10; Ny = 10
mesh = RectangleMesh(Point(0., 0.), Point(L, H), Nx, Ny)
nodal_coordinates = mesh.coordinates()

Vm = FunctionSpace(mesh,'DG',1)
W = VectorFunctionSpace(mesh,'P',1)
F = TensorFunctionSpace(mesh, "Lagrange", 2)
u , v = TrialFunction(W), TestFunction(W)

E = 10e3
nu = 0.3
# plane problem type
model = "plane_stress"
# lame's parameters for plane strain
mu = E/2/(1+nu)
lmbda = E*nu/(1+nu)/(1-2*nu)

# lame's parameters for plane stress
if model == "plane_stress":
    lmbda = 2*mu*lmbda/(lmbda+2*mu)

# displacement boundary condition
bottom = CompiledSubDomain("near(x[1], 0) && on_boundary")
left = CompiledSubDomain("near(x[0], 0) && on_boundary")

bc_u = [DirichletBC(W.sub(1), Constant(0.0), bottom),
        DirichletBC(W.sub(0), Constant(0.0), left),]

# traction boundary condition
top = CompiledSubDomain("near(x[1], 1) && on_boundary")
load = Constant((0, 1e-3))

# index boundary no.
boundaries = MeshFunction("size_t", mesh, mesh.topology().dim() - 1)
boundaries.set_all(0)
top.mark(boundaries,1)
ds = Measure("ds")(subdomain_data=boundaries)
n = FacetNormal(mesh)

def epsilon(u):
    return 0.5*(nabla_grad(u)+nabla_grad(u).T)
def sigma(u):
    return 2.0*mu*epsilon(u)+lmbda*tr(epsilon(u))*Identity(len(u))

LHS = inner(sigma(u), epsilon(v))*dx
RHS = dot(load, v)*ds(1)
u = Function(W, name="Displacement")
K = assemble(LHS)
f = assemble(RHS)
[bc.apply(K, f) for bc in bc_u]
solve(K,u.vector(),f)

plot(u)
plt.show()
```

---

<div class="post-metadata">

**Author:** ![bhaveshshrimali](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/bhaveshshrimali/32/124_2.png) [@bhaveshshrimali](https://fenicsproject.discourse.group/u/bhaveshshrimali)\
**Post date:** [June 3, 2020, 4:04am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/2 "2020-06-03T04:04:08Z")

</div>

> [@Daniel](#):
>
> ```auto
> plot(u)
> plt.show()
> 
> ```

Hi,  
You need to plot the norm since `u` is a vector field. \| u\| = \sqrt{\sum\_{i}u\_i^2}

Use

```python
norm_u = sqrt(inner(u,u))
plot(norm_u)

```

That should give you the result to compare with Abaqus.

---

<div class="post-metadata">

**Author:** ![Daniel](https://avatars.discourse-cdn.com/v4/letter/d/3ec8ea/32.png) [@Daniel](https://fenicsproject.discourse.group/u/Daniel)\
**Post date:** [June 3, 2020, 6:00am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/3 "2020-06-03T06:00:34Z")

</div>

thanks, it works but there is no scale bar (showing which colour represent which range data). how ti fix it?

---

<div class="post-metadata">

**Author:** ![bhaveshshrimali](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/bhaveshshrimali/32/124_2.png) [@bhaveshshrimali](https://fenicsproject.discourse.group/u/bhaveshshrimali)\
**Post date:** [June 3, 2020, 6:02am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/4 "2020-06-03T06:02:34Z")

</div>

```python
surf = plot(norm_u)
plt.colorbar(surf)

```

should add the scalar bar.

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [June 3, 2020, 6:21am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/5 "2020-06-03T06:21:52Z")

</div>

In general, you can save your solution as a pvd or xdmf-file for post processing with for instance Paraview (this is especially recommended in cases of 3D geometries).

---

<div class="post-metadata">

**Author:** ![Daniel](https://avatars.discourse-cdn.com/v4/letter/d/3ec8ea/32.png) [@Daniel](https://fenicsproject.discourse.group/u/Daniel)\
**Post date:** [June 3, 2020, 8:41am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/6 "2020-06-03T08:41:33Z")

</div>

yes, paraview is referable for 3D cases, here, I just want to look around what happen when running code.

---

<div class="post-metadata">

**Author:** ![Daniel](https://avatars.discourse-cdn.com/v4/letter/d/3ec8ea/32.png) [@Daniel](https://fenicsproject.discourse.group/u/Daniel)\
**Post date:** [June 3, 2020, 8:45am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/7 "2020-06-03T08:45:39Z")

</div>

hi, I want to change the colour of map like Abaqus. for doing this, i write:

```
norm_u = sqrt(inner(u,u))
plot(norm_u)
surf = plot(norm_u)
plt.colorbar(surf,cmap='jet')
plt.show()

```

but i can not get the correct colour.

 ![image](https://global.discourse-cdn.com/free1/uploads/fenicsproject1/original/2X/1/1bb0dccf0a8bef1492a08e6f5c3025d1225cf56f.png)

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [June 3, 2020, 8:56am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/8 "2020-06-03T08:56:04Z")

</div>

You need to pass the cmap into the plotting instruction, as in this MWE:

```auto
from dolfin import *

mesh = UnitSquareMesh(10,10)
V = FunctionSpace(mesh, "CG", 1)
v = Function(V)
v.vector()[0] = 1

import matplotlib.pyplot as plt

surf = plot(v, cmap=plt.cm.jet)
plt.colorbar(surf)
plt.savefig("u.png")

```

This is also easy to achieve in Paraview, which offers a large variety of colormaps.

---

<div class="post-metadata">

**Author:** ![Daniel](https://avatars.discourse-cdn.com/v4/letter/d/3ec8ea/32.png) [@Daniel](https://fenicsproject.discourse.group/u/Daniel)\
**Post date:** [June 3, 2020, 9:28am UTC](https://fenicsproject.discourse.group/t/why-i-plot-displacement-arrow-graph-rather-than-cloud-graph/3413/9 "2020-06-03T09:28:07Z")

</div>

thanks dokken. it works
