Improve `FunctionTransformer` diagram representation

### Describe the workflow you want to enable

Currently, using multiple `FunctionTransformers` in a pipeline leads to an uninformative view:

```python
import pandas as pd
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import FunctionTransformer

df = pd.DataFrame([[1,2,3], [4,5,6]], columns=['one','two','three']) # sample data
def a(df): return df+1 # 1st transformer
def b(df): return df*10 # 2nd transformer

make_pipeline(FunctionTransformer(a), FunctionTransformer(b))
```

![image](https://github.com/scikit-learn/scikit-learn/assets/5570380/21382d09-82ad-4e14-8091-6e14ab9989e8)

I would like to see the name of the function being used in the visual blocks


### Describe your proposed solution

I would like to see something like this:

![image](https://github.com/scikit-learn/scikit-learn/assets/5570380/8c67e04a-6328-4afd-9ebc-a0e1da29ca57)

(or perhaps `Function(<name of function>)`  or `<name of function>()` or `FunctionTransformer_<name of function>`) 
 
A sample implementation might be look like this:

```python
from sklearn.preprocessing import FunctionTransformer
from sklearn.utils._estimator_html_repr import _VisualBlock
from functools import partial

class PrettyFunctionTransformer(FunctionTransformer):
    def _sk_visual_block_(self):
        return _VisualBlock(
            "single",
            self,
            names=self.func.func.__name__ if isinstance(self.func, partial) else self.func.__name__,
            name_details=str(self),
        )
```

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

_No response_

COMMENT:
> I a so think that I better the harder way (unfortunately :)).

It's actually "fortunately" for me as I also like the harder way but afraid that people don't think it's worth the complexity 🤣

> I also like 'the harder way' better.

Thanks for confirmation.

> 1)  switch the titles: 'FunctionTransformer' should be the caption and the function names the titles. This way the repetition is in the small font and the transformer func name in the big

This is what I initially did, but then I found the info icon tooltip actually shows "documentation of {name}" which in that case would be "documentation of func name" which I think is improper. I will definitely consider this if I can find an easy way to tweak the info icon tooltip text individually.

> 2) show the partial function name. I don't think there is added value in showing that a function is a partial without showing the original function name. It's the same function but with different defaults.. we can just use the `.func.__name__`.  We use partials a lot as we create pipelines from configuration files (using hydra instantiate)

This I'm hesitant. I do agree that `partial(...)` does not provide (sufficient) useful information, but it's hard to consider all corner cases given that `partial` is not the only other way to construct a function. E.g. `np.vectorize` would need `func.pyfunc.__name__`. What about partial of partial, partial of partial of partial, vectorize of partial, etc.?

Labels: New Feature