plot_tree fails with ValueError Invalid RGBA argument

### Describe the bug

When using `plot_tree` with `filled=True` (so the nodes are colored), one sometimes gets a `ValueError` such as
```
Invalid RGBA argument: '#cb 3-8d'
```

The same `plot_tree` will work fine if `filled=False`, and draw a decision tree. Below is an example. I attach two files with the dump of the DecisionTree and the list of columns used.

Thank you.

### Steps/Code to Reproduce

```
# BUG: fails with ValueError: Invalid RGBA argument: '#cb 4-8c'
import joblib
from sklearn.tree import plot_tree

dt = joblib.load('_br.dmp')
cols = joblib.load('_cols.dmp')
plot_tree(dt,
          feature_names=cols,
          class_names=['Reject', 'Accept'],
          filled=True, rounded=True,
          impurity=True,
          label='root',
          )
```


[_br.dmp](https://github.com/user-attachments/files/16512624/_br.dmp)
[_cols.dmp](https://github.com/user-attachments/files/16512625/_cols.dmp)


### Expected Results

No ValueError should be thrown and the plot should be drawn and correctly colored.

### Actual Results

ValueError Invalid RGBA argument: '#cb 3-8d'

### Versions

```shell
System:
    python: 3.11.4 (main, Jun  7 2023, 12:45:48) [GCC 11.3.0]
executable: /mnt/c/Workspace/py-pip-workspaces/pert.ai.main/.venv/bin/python
   machine: Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.35

Python dependencies:
      sklearn: 1.5.1
          pip: 24.2
   setuptools: 65.5.0
        numpy: 1.26.4
        scipy: 1.12.0
       Cython: None
       pandas: 2.2.2
   matplotlib: 3.9.1
       joblib: 1.3.2
threadpoolctl: 3.3.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: /mnt/c/Workspace/py-pip-workspaces/pert.ai.main/.venv/lib/python3.11/site-packages/numpy.libs/libopenblas64_p-r0-0cf96a72.3.23.dev.so
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: SkylakeX

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: /mnt/c/Workspace/py-pip-workspaces/pert.ai.main/.venv/lib/python3.11/site-packages/scipy.libs/libopenblasp-r0-23e5df77.3.21.dev.so
        version: 0.3.21.dev
threading_layer: pthreads
   architecture: SkylakeX

       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libgomp
       filepath: /mnt/c/Workspace/py-pip-workspaces/pert.ai.main/.venv/lib/python3.11/site-packages/scikit_learn.libs/libgomp-a34b3233.so.1.0.0
        version: None
```

COMMENT:
The issue is related to invalid color codes generated for the nodes in the decision tree. This issue typically arises when the generated colors for the nodes are not valid RGBA values.

suggestion and solution:-
1. Check the Decision Tree Classifier
2. Upgrade Scikit-Learn and Matplotlib
3. Generate the Plot Manually
(Sample snippet:-)
```
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

dt = joblib.load('_br.dmp')
cols = joblib.load('_cols.dmp')

fig, ax = plt.subplots(figsize=(12, 12))  # Customize the figure size as needed
plot_tree(dt,
          feature_names=cols,
          class_names=['Reject', 'Accept'],
          filled=True, rounded=True,
          impurity=True,
          label='root',
          ax=ax)
plt.show()
```
4. Inspect the Generated Colors
5. Custom Color Mapping:-
(sample code:-)
```
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

dt = joblib.load('_br.dmp')
cols = joblib.load('_cols.dmp')

# Define a custom color mapping
custom_colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#00FFFF', '#FF00FF']  # Add more colors as needed

fig, ax = plt.subplots(figsize=(12, 12))
plot_tree(dt,
          feature_names=cols,
          class_names=['Reject', 'Accept'],
          filled=True, rounded=True,
          impurity=True,
          label='root',
          ax=ax,
          colors={'color': custom_colors})
plt.show()
```
Hope this helps, Thanks

Labels: Bug, Needs Triage