Использование LaTeX в графических 3D-осях и метках

Не удается ли plotly (v4.5.0) обрабатывать необработанные строки в LaTeX для меток осей трехмерных фигур?

Для теста я запускаю приведенный ниже код в записной книжке Jupyter. Я намеренно пробовал несколько различных строковых форматов, чтобы поэкспериментировать с тем, как API обрабатывает их. Необработанные строки генерируют LaTeX для title. Но мне не повезло ни с осью, ни с метками, которые являются элементами scene.

import numpy as np
import plotly.graph_objs as go

# define time and space data
x = np.linspace(-10, 10, 400)
t = np.linspace(0, 4*np.pi, 200)
xx, tt = np.meshgrid(x, t)
f1 = 1/np.cosh(xx + 3) * np.exp(1j*2.3*tt)

# visualize
fig = go.Figure(go.Surface(z=np.real(f1), x=xx, y=tt))
fig.update_layout(title=r'$f_1(t)$', 
                  autosize=False, width=500, height=500,
                  margin=dict(l=20, r=20, b=20, t=40),
                  scene=dict(xaxis=dict(title=r'x'),
                             yaxis=dict(title=r'$t$')))
fig.update_layout(scene=dict(xaxis=dict(nticks=3),
                             yaxis=dict(ticktext=["0",r"\pi",r"$2\pi$","3\pi","4\pi"],
                                        tickvals=np.linspace(0,4*np.pi,5))))
fig.show()

person suneater    schedule 19.02.2020    source источник


Ответы (1)


Из приведенного выше описания неясно, чего вы пытаетесь достичь, но я правильно понял, что вы пытаетесь изменить метку оси на графике поверхности. Вот как это легко сделать.

import numpy as np
import plotly.graph_objs as go

# define time and space data
x = np.linspace(-10, 10, 400)
t = np.linspace(0, 4*np.pi, 200)
xx, tt = np.meshgrid(x, t)
f1 = 1/np.cosh(xx + 3) * np.exp(1j*2.3*tt)

# visualize
fig = go.Figure(go.Surface(z=np.real(f1), x=xx, y=tt))
fig.update_layout(title='Plot Title',autosize=True,
                  width=900, height=900, 
                  margin=dict(l=65, r=50, b=65, t=90))
fig.update_layout(scene = dict(
                    xaxis_title='X-axis Title',
                    yaxis_title='X-axis Title',
                    zaxis_title='X-axis Title'))                    
fig.show()

вы также можете добавить контуры на график поверхности:

import numpy as np
import plotly.graph_objs as go

# define time and space data
x = np.linspace(-10, 10, 400)
t = np.linspace(0, 4*np.pi, 200)
xx, tt = np.meshgrid(x, t)
f1 = 1/np.cosh(xx + 3) * np.exp(1j*2.3*tt)

# visualize
fig = go.Figure(go.Surface(z=np.real(f1), x=xx, y=tt))
fig.update_traces(contours_z=dict(show=True, usecolormap=True,
                                  highlightcolor="limegreen", project_z=True))
fig.update_layout(title='Plot Title',autosize=True,
                  width=900, height=900, 
                  margin=dict(l=65, r=50, b=65, t=90))
fig.update_layout(scene = dict(
                    xaxis_title='X-axis Title',
                    yaxis_title='Y-axis Title',
                    zaxis_title='Z-axis Title'))                    
fig.show()

Вот выходное изображение: 1. график оси-метки добавлен axis-label added 2. контурный график добавлен к поверхностному графику контур  участок добавлен к поверхностному графику

person Jay Patel    schedule 16.04.2020
comment
Верно. Я спрашиваю, можете ли вы сгенерировать метки осей LaTeX. В других API построения графиков это часто делается путем передачи необработанной строки, например r"$X$-axis Title". Затем X будет отформатирован через LaTeX. Это не сработало для меня в приведенном выше примере, когда я изначально это пробовал. - person suneater; 22.04.2020