Heatmaps in plotly express

I want to quickly create heatmaps where I already have proper data for the all the dimensions and do not need any of the preprocessing that comes with px.density_heatmap. So for now it seems that I need to revert to graph_objects to accomplish that, since there is no px.heatmap. Is there a reason for that? Or is it just not ready yet?

2 Likes

Hi @realtime, if your heatmap corresponds to 2d image data, you can use the px.imshow function which was introduced in plotly 4.3, and works for 2d single-channel or RGB images. The documentation is on https://plot.ly/python/imshow/. However, it makes some opiniated choices for you, like the [0, 0] element is at the top-left corner (as in an image) and pixels are square. We might extend the API later for a more traditional px.heatmap, for other data than images.

1 Like

I found another way, probably (slightly) illegal:

import plotly.express as px
iris = px.data.iris()
fig = px.scatter_3d(iris, x="sepal_width", y="sepal_length", z="petal_length")
fig.data[0]._props['type'] = 'heatmap'
fig.show()

The results look as I would expect them to look, but unfortunately the axis titles are lost with that approach.

1 Like

Just a thread bump to inquire if a formal px.heatmap is on the roadmap…? It would be great to be able generate heatmaps quickly from tidy data (pd.DataFrame with columns to assign to x, y, z instead of 2D img data) with the same ease that other tidy px graph types can be created! Thanks.

1 Like

Agreed. Plotly designers, could we please have this?

We’ve expanded the capabilities of px.imshow() quite a bit since this post was created… Check it out at https://plotly.com/python/imshow/

In addition, Plotly Express has always had px.density_heatmap() which accepts slightly different inputs: https://plotly.com/python/2D-Histogram/

I’d be curious to understand what function signature folks are looking for that’s not close to one of those two :slight_smile:

If you accept answer from a novice user…
Method posted by ‘realtime’ is (almost) what I need. I tried density_heatmap and imshow but couldn’t get satisfactory results.
I mean I think I know how to get there with mentioned two methods but few extra steps are required. With realtime’s method I get straight translation of values to color without bins and no need for manual mapping. Graphs from both ‘legal’ methods look quite different from what I expected, while ‘illegal’ get me right to where I wanted to be (almost :slight_smile: ).

That said… let me thank you for Plotly. I think… No, I’m sure! it is awesome! Thank you very much for it.