Use Pandas index in Plotly Express

31,867

Solution 1

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()

Solution 2

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()
Share:
31,867
Laurens Koppenol
Author by

Laurens Koppenol

Just hobbying around. SOreadytohelp

Updated on February 21, 2020

Comments

  • Laurens Koppenol
    Laurens Koppenol about 4 years

    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()
    
    • nicolaskruchten
      nicolaskruchten almost 5 years
      Your 'ugly fix' is the recommended approach today :)
    • StefanQ
      StefanQ over 4 years
      @nicolaskruchten With my own data (pandaframes resuting from some web scraping) I found the "ugly fix" to be the way to go, too. Hence, I'd suggest making your answer (together with a link to some official documentation (I found nothing on that case)) the official answer.
    • nicolaskruchten
      nicolaskruchten over 4 years
      @StefanQ I'm hoping to actually add support for this kind of thing in the next few weeks :)
    • Laurens Koppenol
      Laurens Koppenol over 4 years
      Feel free to post your above remarks as answer and I will mark it accordingly. Makes it easy for you to keep the community up to date!
  • Laurens Koppenol
    Laurens Koppenol almost 5 years
    Thanks for your reply. This is what I wanted to point out with my bogus example.
  • Christian Aichinger
    Christian Aichinger about 4 years
    This does not use the index for the x axis! It uses range(iris.index.size) as X axis.
  • Eulenfuchswiesel
    Eulenfuchswiesel almost 4 years
    Does this also work with a DatetimeIndex? I am having some difficulties with this issue at the moment
  • soungalo
    soungalo almost 4 years
    Note that this geature has been added somewhere after plotly version 4.1 (had to update for this to work).