plotly: изменение меток на оси z

Рейтинг: 0Ответов: 1Опубликовано: 14.03.2023

Нужно на plotly сделать график, сделал все работает. Однако смущает оси, особенно z хотелось бы чтоб цифры шли нормально от 1 до 11. А не как сейчас от 0 до 10 с промежутком в 2. Как это сделать?

from dash import Dash, dcc, html, Input, Output
import plotly.graph_objects as go
import numpy as np

app = Dash(__name__)

app.layout = html.Div([
    html.H4('Interactive plot with custom data source'),
    dcc.Graph(id="renderers-x-graph"),
    html.P("Number of bars:"),
    dcc.Slider(id="renderers-x-slider", min=2, max=10, value=4, step=1),
])


@app.callback(
    Output("renderers-x-graph", "figure"), 
    Input("renderers-x-slider", "value"))
def update_bar_chart(size):
    fig = go.Figure(go.Surface(
    contours = {
        "x": {"show": True, "start": 1.5, "end": 2, "size": 0.04, "color":"white"},
        "z": {"show": True, "start": 0, "end": 0.5, "size": 0.05, "color":"#FF0000"}
    },
    x = [1,2,3,4,5],
    y = [1,2,3,4,5],
    z = [
        [0, 2, 0, 5, 0],
        [1, 0, 1, 0, 1],
        [0, 1, 0, 1, 0],
        [1, 0, 10, 0, 1],
        [0, 1, 0, 1, 0]
    ]))
    
    return fig

if __name__ == "__main__":
    app.run_server(debug=True)

Пример графика

Ответы

▲ 1Принят

Вообще, странный вопрос. У вас на оси отображаются значения в соответствии с вашими данными. минимальное значение параметра z у вас 0, максимальное - 10, вот вы их и видите. Тем не менее, если хотите указать шаг меток, то можно сделать так:

import plotly.express as px
import plotly.graph_objects as go

x = [1,2,3,4,5]
y = [1,2,3,4,5]
z = [[0, 2, 0, 5, 0],
    [1, 0, 1, 0, 1],
    [0, 1, 0, 1, 0],
    [1, 0, 10, 0, 1],
    [0, 1, 0, 1, 0]]

fig = go.Figure(go.Surface(
    contours = {
        "x": {"show": True, "start": 1.5, "end": 2, "size": 0.04, "color":"white"},
        "z": {"show": True, "start": 0, "end": 0.5, "size": 0.05, "color":"#FF0000"}
    },
    x = x,
    y = y,
    z = z
    ))


fig.update_layout(
    scene = dict(
        zaxis = dict(tickmode = 'linear', dtick = 1), # параметр dtick - шаг
        ),
    width=800, height=800
     )
fig.show()

получите:

введите сюда описание изображения

Если же вам нужно, чтобы действительно значения по оси z начинались с 1 и шли до 11, то можно так:

import plotly.express as px
import plotly.graph_objects as go
import numpy as np


x = [1,2,3,4,5]
y = [1,2,3,4,5]
z = [[0, 2, 0, 5, 0],
    [1, 0, 1, 0, 1],
    [0, 1, 0, 1, 0],
    [1, 0, 10, 0, 1],
    [0, 1, 0, 1, 0]]

fig = go.Figure(go.Surface(
    contours = {
        "x": {"show": True, "start": 1.5, "end": 2, "size": 0.04, "color":"white"},
        "z": {"show": True, "start": 0, "end": 0.5, "size": 0.05, "color":"#FF0000"}
    },
    x = x,
    y = y,
    z = z
    ))

Z = np.array(z)

fig.update_layout(
    scene = dict(
        zaxis = dict(dtick = 1, tickmode = 'array', tickvals = list(range(Z.min(), Z.max()+1)), ticktext = np.arange(Z.min()+1, Z.max()+2, 1)),
        ),
    width=800, height=800
     )
fig.show()

получите: введите сюда описание изображения

Обратите внимание, что я вынес данные координат за пределы параметров фигуры, так будет проще.