当我正在开发一个与dash交互的界面时,我使用plotly作为我的数字。然而,我对这个软件包的经验有限--我通常使用matplotlib来制作数字。
无论如何,我想用三维数据来创建一个图形,其中第三维度是用颜色表示的。对于matplotlib,我将使用pcolormesh (或pcolor)。不幸的是,我无法在plotly中找到一个等价的函数。我不能使用Contour或类似的,因为z-data应该遵循特定的(x,y)-coordinates。
让我以一个例子加以澄清。为了方便起见,我们可以使用以下虚拟数据:
import numpy as np
x, y = np.meshgrid(np.linspace(0, 10), np.linspace(0, 10))
y += 2 * np.sin(x * 2 * np.pi / 10)
z = np.exp(-x / 10)我想要的--并且能够使用matplotlib生成--结果来自以下代码(后面的结果):
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.pcolormesh(x, y, z)

然而,在plotly中,除了使用颜色编码的scatter-plot之外,我没有得到更多的信息:
fig = go.Figure()
fig.add_trace(
go.Scatter(x=x, y=y, marker=dict(color=z))
)以下内容如下所示:

然而,这并不是我的目标。扩大marker的大小以“欺骗”查看器是不够的,因为实际数据稍微复杂一些,(x,y)-coordinates之间有不同的差距。
希望任何人都能帮我。非常感谢你的努力!
PS。我见过this post有一个类似的问题。但是,它的解决办法不适用于我。
发布于 2022-01-11 19:01:36
您可以增加x轴坐标的数目。
import numpy as np
import plotly.graph_objects as go
x, y = np.meshgrid(np.linspace(0, 10, 200), np.linspace(0, 10))
y += 2 * np.sin(x * 2 * np.pi / 10)
z = np.exp(-x / 10)
go.Figure(go.Scatter(x=x.flatten(), y=y.flatten(), mode="markers", marker_color=z.flatten()))

实验性
不完全工作,受Matplotlib: save plot to numpy array启发
import numpy as np
import plotly.express as px
import io
import matplotlib.pyplot as plt
x, y = np.meshgrid(np.linspace(0, 10), np.linspace(0, 10))
y += 2 * np.sin(x * 2 * np.pi / 10)
z = np.exp(-x / 10)
# plt.axes("off")
fig, ax = plt.subplots()
# ax.axes.visible = False
ax = ax.pcolormesh(x, y, z)
with io.BytesIO() as buff:
fig.savefig(buff, format='raw', pad_inches=0, bbox_inches=0)
buff.seek(0)
data = np.frombuffer(buff.getvalue(), dtype=np.uint8)
w, h = fig.canvas.get_width_height()
im = data.reshape((int(h), int(w), -1))
px.imshow(im)https://stackoverflow.com/questions/70669805
复制相似问题