python 用于静态导出的2D图中的方形纵横比

z0qdvdin  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(75)

我想在www.example.com中创建2D散点图plotly.py,并将其导出为具有正方形纵横比的静态. svg文件。更具体地说,我想让轴以屏幕为单位变成正方形(类似于matplotlib的这个问题:Matplotlib scale axis lengths to be equal)。有没有什么方法可以用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没有重新调整图的宽度/高度,每次关于我的传奇项目的长度?

wribegjk

wribegjk1#

我也遇到过类似的问题…看到这个之后: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')

不确定它是否会为多重痕迹和传说工作。

相关问题