# Interactive plotting#

When generating geometry from scratch within MAPDL, it is often necessary to plot the geometry, such as key points, lines, areas, and volumes. PyMAPDL supports plotting basic CAD using VTK. The `Mapdl` class leverages the existing MAPDL commands by providing the following functions, which transfer the geometry to Python to visualize it:

These methods rely on the `ansys.mapdl.core.plotting.general_plotter()` method. Combined with the MAPDL geometry commands, you can generate and visualize geometry from scratch without opening the GUI using the `open_gui()` method.

## Line plotting#

You plot lines within Python using the `Mapdl.lplot()` method:

```>>> from ansys.mapdl.core import launch_mapdl
>>> mapdl = launch_mapdl()

Create a rectangle with a few holes

>>> mapdl.prep7()
>>> rect_anum = mapdl.blc4(width=1, height=0.2)

Create several circles in the middle in the rectangle

>>> for x in np.linspace(0.1, 0.9, 8):
...     mapdl.cyl4(x, 0.1, 0.025)
...

Generate a line plot

>>> mapdl.lplot(color_lines=True, cpos="xy")
```

## Area and volume plotting#

You can using Boolean operations to obtain more complex geometry and visualize them using the `Mapdl.vplot()` method. This example cuts the initial area with the eight circles and then extrudes it.

```>>> plate_holes = mapdl.asba(rect_anum, "all")

Extrude this area

>>> mapdl.vext(plate_holes, dz=0.1)
>>> mapdl.vplot()
```

## Node and element plotting#

You can plot nodes and elements directly from the instance of the `Mapdl` class. This code defines some element types, performs meshing, and then displays the mesh:

```>>> mapdl.et(1, "SOLID186")
>>> mapdl.vsweep("ALL")
>>> mapdl.esize(0.1)
>>> mapdl.eplot()
```

### Plotting non-interactively using MAPDL#

You can also plot using MAPDL’s native plotting tools. To use the native tools, pass `vtk=False` when running plotting commands such as the `Mapdl.aplot` and `Mapdl.eplot` methods. Plots are generated within MAPDL and then shown using Matplotlib.

Start PyMAPDL

```>>> from ansys.mapdl.core import launch_mapdl
>>> mapdl = launch_mapdl()
```

Create a square area using key points

```>>> mapdl.prep7()
>>> mapdl.k(1, 0, 0, 0)
>>> mapdl.k(2, 1, 0, 0)
>>> mapdl.k(3, 1, 1, 0)
>>> mapdl.k(4, 0, 1, 0)
>>> mapdl.l(1, 2)
>>> mapdl.l(2, 3)
>>> mapdl.l(3, 4)
>>> mapdl.l(4, 1)
>>> mapdl.al(1, 2, 3, 4)
```

Set the view to “isometric”

```>>> mapdl.view(1, 1, 1, 1)
>>> mapdl.pnum("kp", 1)  # enable keypoint numbering
>>> mapdl.pnum("line", 1)  # enable line numbering
```

Each of these creates a Matplotlib figure and pause execution.

```>>> mapdl.aplot(vtk=False)
>>> mapdl.lplot(vtk=False)
>>> mapdl.kplot(vtk=False)
```

## Plotting keyword options#

When `vtk=True`, which is the default, all MAPDL plotting methods allow you to enter in additional keyword arguments to better control the plot. For example, you can automatically generate a screenshot of an area plot or element plot with this code:

```>>> mapdl.aplot(savefig="aplot.png")
>>> mapdl.eplot(savefig="eplot.png")
```

You can also control the camera position with `cpos` when you want to view from a standard viewing direction. This code shows how to view the XY plane with `cpos='xy'`.

```>>> mapdl.eplot(cpos="xy")
```

For all general plotting options, see the `ansys.mapdl.core.plotting.general_plotter()` method.

## Plotting boundary conditions#

Warning

This feature is beta so its functionalities and stability are limited. See the documentation regarding the allowed boundary conditions and targets.

It is possible to plot the boundary conditions applied on the model by specifying `plot_bc=True` in plotting functions. For example, this code specifies `plot_bc=True` for the `Mapdl.nplot()` method:

```>>> mapdl.nplot(
...     plot_bc=True, plot_labels=True, savefig=f"bc_plot.png", bc_labels="mechanical"
... )
```

Note

Because boundary conditions can only target nodes, you can only use `plot_bc` as an argument in the `Mapdl.nplot()` method.