Plotly не обновляет информацию правильно с помощью раскрывающегося списка.Python

Программы на Python
Ответить
Anonymous
 Plotly не обновляет информацию правильно с помощью раскрывающегося списка.

Сообщение Anonymous »

У меня возникла проблема с обновлением средней линии на диаграмме рассеяния при взаимодействии с раскрывающимся списком. Раскрывающийся список позволяет пользователю выбрать столбец (ось Y), и я хочу, чтобы медиана выбранной оси Y обновлялась соответствующим образом. Однако когда я выбираю новую переменную из раскрывающегося списка, срединная линия не обновляется должным образом.
Я делюсь данными игрушечного образца:

Код: Выделить всё

import pandas as pd

df_input = pd.DataFrame({
'rows': range(1, 101),
'column_a': [i + (i % 10) for i in range(1, 101)],
'column_b': [i * 2 for i in range(1, 101)],
'column_c': [i ** 0.5 for i in range(1, 101)],
'outlier_prob': [0.01 * (i % 10) for i in range(1, 101)]
})
Вот функцию, которую я использую

Код: Выделить всё

import plotly.graph_objects as go

def plot_dq_scatter_dropdown(df):
# Initialize the figure
fig = go.Figure()

# Function to add median lines (vertical for rows, horizontal for selected Y)
def add_median_lines(y):
fig.data = []  # Clear previous data

# Add a scatter trace for the selected Y variable
fig.add_trace(go.Scatter(
x=df["rows"],
y=df[y],
mode='markers',
marker=dict(color=df['outlier_prob'], colorscale='viridis', showscale=True, colorbar=dict(title='Outlier Probability')),
hoverinfo='text',
text=df.index,  # Or use other columns for hover data if needed
name=f'{y} vs rows',  # This will still be used for the hover and data display
showlegend=False  # Hide the legend for each individual trace
))

# Calculate medians for both X and selected Y
median_x = df["rows"].median()  # Median of X (rows)
median_y = df[y].median()  # Median of selected Y-variable

# Add vertical median line for 'rows'
fig.add_vline(x=median_x, line=dict(color="orange", dash="dash", width=2),
annotation_text="Median rows", annotation_position="top left")

# Add horizontal median line for selected Y-variable
fig.add_hline(y=median_y, line=dict(color="orange", dash="dash", width=2),
annotation_text=f"Median {y}, {median_y}", annotation_position="top left")

# Update layout after adding the data and median lines
fig.update_layout(
title=f"Scatter Plot: rows vs {y}",
xaxis_title="rows",
yaxis_title=y,
autosize=True
)

# Add a dropdown menu for selecting the Y-axis variable
fig.update_layout(
updatemenus=[dict(
type="dropdown",
x=0.17,
y=1.15,
showactive=True,
buttons=[
dict(
label=f"{y}",
method="update",
args=[{
'y': [df[y]],
'x': [df["rows"]],
'type': 'scatter',
'mode': 'markers',
'marker': dict(color=df['outlier_prob'], colorscale='viridis', showscale=True, colorbar=dict(title='Outlier Probability')),
'hoverinfo': 'text',
'text': df.index,
'name': f'{y} vs rows',
'showlegend': False
}, {
'title': f"Scatter Plot: rows vs {y}",
'yaxis.title': y
}]
) for y in df.columns if y not in ["rows", "outlier_prob"]
]
)]
)

# Display the initial plot (default to the second column for the first plot)
add_median_lines(df.columns[1])

# Show the plot
fig.show()
Вот пример вызова функции:

Код: Выделить всё

# Call the function to plot the graph
plot_dq_scatter_dropdown(df_input)
Вот ошибка, с которой я сталкиваюсь визуально:
[img]https:// i.sstatic.net/WvKQMRwX.png[/img]

Горизонтальная трасса, обведенная зеленым, неожиданно является постоянной как columns_a, поскольку именно с ней я взаимодействую в раскрывающийся список был Column_b. Вертикальную трассу можно зафиксировать, поскольку она не взаимодействует с этой осью.

Подробнее здесь: https://stackoverflow.com/questions/791 ... eractivity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»