Plotly, такой же масштаб для оси x и y

Я использую plotly для python, и я не могу установить x и y ось, чтобы они могли иметь одинаковый масштаб:

вот мой макет:

layout = Layout(
    xaxis=XAxis(
        range=[-150, 150],
        showgrid=True,
        zeroline=True,
        showline=True,
        gridcolor='#bdbdbd',
        gridwidth=2,
        zerolinecolor='#969696',
        zerolinewidth=4,
        linecolor='#636363',
        linewidth=6
    ),
    yaxis=YAxis(
        range=[-150,150],
        showgrid=True,
        zeroline=True,
        showline=True,
        gridcolor='#bdbdbd',
        gridwidth=2,
        zerolinecolor='#969696',
        zerolinewidth=4,
        linecolor='#636363',
        linewidth=6
    )
)

и тогда я получаю что-то вроде этого!

enter image description here

почему масштаб отличается для x и y? это повлияет на мою визуализацию.

как я могу получить сетку с квадратными ячейками?

3 ответов


вы можете назначить одну длину высота и ширина в свой макет. Вот пример:

layout = Layout(
    xaxis=XAxis(
       range=[-150, 150],
       showgrid=True,
       zeroline=True,
       showline=True,
       gridcolor='#bdbdbd',
       gridwidth=2,
       zerolinecolor='#969696',
       zerolinewidth=4,
       linecolor='#636363',
       linewidth=6
    ),
    yaxis=YAxis(
        range=[-150,150],
        showgrid=True,
        zeroline=True,
        showline=True,
        gridcolor='#bdbdbd',
        gridwidth=2,
        zerolinecolor='#969696',
        zerolinewidth=4,
        linecolor='#636363',
        linewidth=6
   ),
   height=600,
   width=600,
)

наконец, эта функция реализуется.

layout = go.Layout(yaxis=dict(scaleanchor="x", scaleratio=1))

см. пример здесь https://plot.ly/python/axes/#fixed-ratio-axes.


@NEDA ответ работает только для равных диапазонов как на x, так и на y-что редко бывает. Кажется, это то, о чем просят многие люди, что-то вроде оси matplotlib ("equal"). См.https://github.com/plotly/plotly.py/issues/70

на данный момент я использую множитель для обоих диапазонов отдельно - по существу, определяя длину каждой единицы длины на каждой оси.

height=(yMax - yMin) * mul
width= (xMax - xMin) * mul

даже при этом сетка не является идеальным квадратом %100..