pythonpandasdataframeplotly

How to make plotly text bold using scatter?


I'm trying to make a graph using plotly library and I want to make some texts in bold here's the code used :

import plotly.express as px
import pandas as pd
data = {
    "lib_acte":["test 98lop1", "test9665 opp1", "test QSDFR1", "test ABBE1", "testtest21","test23"],
    "x":[12.6, 10.8, -1, -15.2, -10.4, 1.6],
    "y":[15, 5, 44, -11, -35, -19],
    "circle_size":[375, 112.5, 60,210, 202.5, 195],
    "color":["green", "green", "green", "red", "red", "red"],
    "textfont":["normal", "normal", "normal", "bold", "bold", "bold"],
}

#load data into a DataFrame object:
df = pd.DataFrame(data)

fig = px.scatter(
        df,
        x="x", 
        y="y", 
        color="color",
        size='circle_size',
        text="lib_acte",
        hover_name="lib_acte",
        color_discrete_map={"red": "red", "green": "green"},
        title="chart"
      )
fig.update_traces(textposition='middle right', textfont_size=14, textfont_color='black', textfont_family="Inter", hoverinfo="skip")
newnames = {'red':'red title', 'green': 'green title'}

fig.update_layout(
        {
            
            'yaxis': {
                "range": [-200, 200],
                'zerolinewidth': 2, 
                "zerolinecolor": "red",
                "tick0": -200,
                "dtick":45,
            },
            'xaxis': {
                "range": [-200, 200],
                'zerolinewidth': 2, 
                "zerolinecolor": "gray",
                "tick0": -200,
                "dtick": 45,
                #  "scaleanchor": 'y'
            },
           
            "height": 800,
        }
    )
fig.add_scatter(
        x=[0, 0, -200, -200],
        y=[0, 200, 200, 0],
        fill="toself",
        fillcolor="gray",
        zorder=-1,
        mode="markers",
        marker_color="rgba(0,0,0,0)",
        showlegend=False,
        hoverinfo="skip"
    )
fig.add_scatter(
        x=[0, 0, 200, 200],
        y=[0, -200, -200, 0],
        fill="toself",
        fillcolor="yellow",
        zorder=-1,
        mode="markers",
        marker_color="rgba(0,0,0,0)",
        showlegend=False,
        hoverinfo="skip"
    )
fig.update_layout(
   
            paper_bgcolor="#F1F2F6",
        )
fig.show()

and here's the output of above code: output

What I'm trying to do is to make "test ABBE1", "testtest21","test23" in bold on the graph, could anyone please help how to do that ?


Solution

  • Not sure if there is a better solution, but, as mentioned in furas's comment you can use the HTML tag <b>…</b> for the elements that should be bold-faced. You can achieve this, for example, by adding the following line:

    # Create your data dict (as before)
    data = {
    ...
    }
    
    # Add HTML tag for boldface
    data["lib_acte"] = [(f"<b>{el}</b>" if ft == "bold" else el) for el, ft in 
                        zip(data["lib_acte"], data["textfont"])]
    
    # Create dataframe (as before)
    df = pd.DataFrame(data)
    

    The documentation says:

    Chart Studio uses a subset of HTML tags to do things like newline (<br>), bold (<b></b>), italics (<i></i>), and hyperlinks (<a href=’…’></a>). Tags <em>, <sup>, and <sub> are also supported.

    Here, Chart Studio is the online service built on top of and provided by the makers of plotly. While not explicitly stated, I am quite sure that the same subset of HTML tags also applies to plotly (stand-alone) – I just tried successfully with <b>, <sup>, and <a href=…>.