Use Pandas index in Plotly Express

Question:

Plotly Express allows me to easily plot a pandas dataframe, as explained in their examples. Rather than using a named column for x and a named column for y, I would like to use the dataframe’s index for x and a named column for y.

Example using named columns

import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, x="sepal_width", y="sepal_length")
fig.show()

What i want (bogus example)

import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, x="index", y="sepal_length")
fig.show()

This obviously throws:

ValueError: Value of ‘x’ is not the name of a column in ‘data_frame’.
Expected one of [‘sepal_length’, ‘sepal_width’, ‘petal_length’,
‘petal_width’, ‘species’, ‘species_id’] but received: index

Ugly fix

import plotly.express as px
iris = px.data.iris().reset_index()
fig = px.scatter(iris, x="index", y="sepal_length")
fig.show()
Asked By: Laurens Koppenol

||

Answers:

You can only pass the column name at x & y parameters of px.scatter(). Seems there is no column named “index” in the iris dataset.

Answered By: user11818600

You can simply leave it blank, like so:

import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, y="sepal_length")
fig.show()
Answered By: PassingThrough

Reference: https://plot.ly/python/px-arguments/#using-the-index-of-a-dataframe

You can pass the index as reference explicitly.

So in your case, this would be:

import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, x=iris.index, y="sepal_length")
fig.show()

BONUS QUESTION: what if iris has a pd.MultiIndex?

Use pd.MultiIndex.get_level_values.

import plotly.express as px

# dummy example for multiindex
iris = px.data.iris().set_index(['species', 'species_id', iris.index])

fig = px.scatter(
   iris, 
   x=iris.index.get_level_values(2), 
   y="sepal_length"
)

fig.show()
Answered By: syltruong