Vince
Vince

Reputation: 557

plotly express heatmap cell size

How can i change the size of cells in a plotly express heatmap? I would need bigger cells

import plotly.express as px
fig1 = px.imshow(df[col],color_continuous_scale='Greens')
fig1.layout.yaxis.type = 'category'
fig1.layout.xaxis.type = 'category'
fig1.layout.yaxis.tickmode = 'linear'
fig1.layout.xaxis.tickmode = 'linear'
fig1.layout.xaxis.tickangle = 65
fig1.layout.autosize = True
fig1.layout.height = 500
fig1.layout.width = 500

fig1.show()

Result (very narrow)

enter image description here

Upvotes: 9

Views: 12733

Answers (3)

Ari Lupin
Ari Lupin

Reputation: 21

Using scaleanchors and constraining to [![enter image description here][1]][1]"domain" seem to do the trick, along with fixing the width and then scaling the height according to the number of rows and columns:


import plotly.graph_objects as go
import numpy as np

data = np.random.rand(8, 12)  # 8 rows and 12 columns

heatmap = go.Heatmap(
    z=data,
    colorscale='Viridis',
    colorbar=dict(thickness=20, ticklen=4)
)

fig = go.Figure(data=[heatmap])

# for aspect ratio
num_rows, num_cols = data.shape

# set some margins and padding
margin = 50
colorbar_width = 50

# fix the width, scale the height
fig_width = 600
fig_height = (fig_width - margin - colorbar_width) * num_rows / num_cols + margin

fig.update_layout(
    width=fig_width,
    height=fig_height,
    margin=dict(t=margin, b=margin, l=margin, r=margin + colorbar_width),
    xaxis=dict(scaleanchor="y", constrain="domain"),
    yaxis=dict(scaleanchor="x", constrain="domain")
)

fig.show()

A plotly heatmap with square cells

Upvotes: 0

Alexis
Alexis

Reputation: 2294

A little late, but if you want the cells to be wider, use this:

fig1 = px.imshow(df[col],color_continuous_scale='Greens', aspect='auto')

Setting the aspect argument to "auto" will fill the plotting area using non-square tiles.

Upvotes: 6

r-beginners
r-beginners

Reputation: 35135

'px' may not make it square due to the color bar, so why not use 'go'?

import plotly.graph_objects as go

fig = go.Figure(data=go.Heatmap(
                    z=[[1, 20, 30],
                      [20, 1, 60],
                      [30, 60, 1]]))

fig.show()

enter image description here

Set the graph size.

fig.layout.height = 500
fig.layout.width = 500

enter image description here

Examples at px

import plotly.express as px
data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]]
fig = px.imshow(data,
                labels=dict(x="Day of Week", y="Time of Day", color="Productivity"),
                x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
                y=['Morning', 'Afternoon', 'Evening']
               )
fig.update_xaxes(side="top")

fig.layout.height = 500
fig.layout.width = 500

fig.show()

enter image description here

Upvotes: 7

Related Questions