plotly / plotly.py

The interactive graphing library for Python :sparkles: This project now includes Plotly Express!
https://plotly.com/python/
MIT License
16.18k stars 2.54k forks source link

Reassigning Yaxis Labels Inconsistent When Using hoversubplots & hovermode set #4777

Open ryandhoover opened 3 weeks ago

ryandhoover commented 3 weeks ago

I've been having an issue when you define two xaxes and populate three yaxes per xaxis (in a 2x3) grid while setting "hoversubplots= "axis"", with "hovermode= "xunified"". I've found I cannot rename two of the 6 Yaxis labels.

`import plotly.graph_objects as go from datetime import date from plotly import subplots import random

def get_test_data(): x_data, y_data = [], [] for v in range(30): x_data.append(date(2024, 10, v+1)) y_data.append(random.random()) return x_data, y_data

data= [] for yaxis in range(1,7):

if yaxis % 2:
    xaxis = "x1"
else:
    xaxis= "x2"

x, y = get_test_data()
data.append(go.Scatter(x= x, y= y, xaxis= f"{xaxis}", yaxis= f"y{yaxis}", name= f"Test{yaxis}y{yaxis}"))

titles = ["First","Second","Third","Fourth","Fifth","Sixth"] layout = dict( hoversubplots= "axis", hovermode= "x unified", title= "Test Plot", font= dict( family= "Courier New, monospace", size= 14, color= "rgba(255,255,255,1)"), plot_bgcolor= "rgba(0,0,0,1)", paper_bgcolor= "rgba(0,0,0,1)", grid= dict(rows=3, columns=2), )

figure= subplots.make_subplots(rows= 3, cols=2, subplot_titles= titles, specs= [[{},{}] for i in range(3)]) figure.add_traces(data[0]) figure.add_traces(data[1]) figure.add_traces(data[2]) figure.add_traces(data[3]) figure.add_traces(data[4]) figure.add_traces(data[5]) figure["layout"][f"yaxis1"]["title"] = "yaxis1" figure["layout"][f"yaxis2"]["title"] = "yaxis2" figure["layout"][f"yaxis3"]["title"] = "yaxis3" figure["layout"][f"yaxis4"]["title"] = "yaxis4" figure["layout"][f"yaxis5"]["title"] = "yaxis5" figure["layout"][f"yaxis6"]["title"] = "yaxis6"

figure.update_layout(layout) figure.update_xaxes(gridcolor="rgba(80,80,80,1)", showticklabels= True) figure.update_yaxes(gridcolor="rgba(80,80,80,1)", autorange= True, showticklabels= True)

figure.show()`

ryandhoover commented 3 weeks ago

My output looks like this, where you cannot relabel yaxis4 and yaxis6 as you'd expect.

image