# Interactive Plotting#

When generating geometry from scratch within MAPDL, it is often necessary to plot the geometry (e.g. keypoints, lines, areas, volumes), and PyMAPDL supports plotting basic CAD using VTK. The `Mapdl` class leverages the existing MAPDL commands (e.g. `Mapdl.kplot()`, `Mapdl.vplot()`, `Mapdl.eplot()`) and transfers the geometry to Python to visualize it. These commands rely on the function `ansys.mapdl.core.plotting.general_plotter()`. Combined with the MAPDL geometry commands, you can generate and visualize geometry from scratch without opening the GUI using `open_gui()`.

## Line Plotting#

Plot lines within Python using `Mapdl.lplot()`.

```>>> 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#

More complex geometry can be obtained using boolean operations and can be visualized using `Mapdl.vplot()`. In this example, we cut the initial area with the 8 circles and then extrude it.

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

Extrude this area

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

## Node and Element Plotting#

Nodes and elements can also be plotted directly from the instance of `Mapdl`. We continue the example by defining some element types, meshing, and displaying 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 `Mapdl.aplot`, `Mapdl.eplot`, etc.. Plots will be generated within MAPDL and then shown using matploblib.

Start PyMAPDL

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

Create a square area using keypoints

```>>> 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 will create a matplotlib figure and pause execution

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

For more details on the plotting functions, see Plotting.

## Plotting Keyword Options#

When using `vtk=True` (default `True`), all the 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:

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

You can also control the camera position with the `cpos` when you want to view from a standard viewing direction (for example view the XY plane with `cpos='xy'`.

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

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

## Plotting Boundary Conditions#

Warning

This feature is still on beta so its functionalities and stability are limited. Please check 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 the plotting functions such as `Mapdl.nplot()`.

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

Note

Since the boundary conditions can only target nodes at the moment, you can only use `plot_bc` as an argument in the function `Mapdl.nplot()`.