Your `sol`

is a list, with 1 element:

```
sage: sol
[x == 3]
```

Then, `sol[0]`

is a symbolic expression. To get its right hand side, it suffice to use the `.rhs()`

method:

```
sage: sol[0]
x == 3
sage: sol[0].rhs()
3
```

Then, it should be enough to work since the symbolic variable `3`

should be automatically coerced by Sage into a numeric value if needed (and plot should understand symbolic numbers).

```
sage: sol[0].rhs().parent()
Symbolic Ring
```

That said, it may be a good idea to escape the symbolic ring. If you want to have a genuine integer, you can do:

```
sage: ZZ(sol[0].rhs())
3
sage: ZZ(sol[0].rhs()).parent()
Integer Ring
```

If you want an algebraic number:

```
sage: AA(sol[0].rhs())
3
sage: AA(sol[0].rhs()).parent()
Algebraic Real Field
```

If you want a floating number:

```
sage: RR(sol[0].rhs())
3.00000000000000
sage: RR(sol[0].rhs()).parent()
Real Field with 53 bits of precision
```