静态导出的二维图中的方形纵横比

问题描述 投票:0回答:1

我想在plotly.py 中创建 2D 散点图,并将其导出为具有方形纵横比的静态 .svg 文件。更具体地说,我想让轴以屏幕单位为正方形(类似于这个 matplotlib 问题:Matplotlib 缩放轴长度相等)。 有什么方法可以使用plotly 实现类似的效果吗? (请注意,我的 x 和 y 数据的比例不同)

我已经尝试简单地将图形宽度和高度设置为相等的值,如果我只有一条迹线并且没有图例,这或多或少可以正常工作。

import numpy as np
import plotly.graph_objects as go

np.random.seed(42)

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=np.random.uniform(0, 1, 50), 
    y=np.random.randint(1, 100, 50), 
    mode='markers',
    ))


fig.update_layout(width=500, height=500)

# NOTE: Static image generation in plotly requires Kaleido (pip install -U kaleido)
fig.write_image("example.svg")

Output: example plot with one trace and fixed width and height

但是,如果我有多个痕迹并添加图例,我最终会得到一个扭曲的情节:

import numpy as np
import plotly.graph_objects as go

np.random.seed(42)

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=np.random.uniform(0, 1, 50), 
    y=np.random.randint(1, 100, 50), 
    mode='markers',
    name="SomeLongTraceLabel1"
    ))

fig.add_trace(go.Scatter(
    x=np.random.uniform(0, 1, 50), 
    y=np.random.randint(1, 100, 50), 
    mode='markers',
    name="SomeLongTraceLabel2"
    ))

fig.update_layout(width=500, height=500)

# NOTE: Static image generation requires Kaleido (pip install -U kaleido)
fig.write_image("example.svg")

Output: example plot with two traces and a legend

我认为可以通过

layout.scene.aspectmode="cubic"
设置来实现 3D 绘图,但我可以找到类似的 2D 绘图设置。 有什么方法可以让我的绘图自动看起来像这样:Desired Output,而无需每次根据图例项的长度重新调整图形宽度/高度?

python plotly plotly-python
1个回答
0
投票

我遇到了类似的问题......看到这个后:https://github.com/plotly/plotly.py/issues/70

我解决如下:

import plotly.express as px

fig = px.scatter(df, x='X', y='Z')
fig.update_xaxes(constrain='domain')  
fig.update_yaxes(scaleanchor= 'x')

不确定它是否适用于多个痕迹和图例。

© www.soinside.com 2019 - 2024. All rights reserved.