在 Plotly Express 中使用 Pandas 索引

Use Pandas index in Plotly Express

Plotly Express 允许我轻松绘制 pandas 数据框,如他们的示例中所述。我不想为 x 使用命名列,为 y 使用命名列,而是为 x 使用数据框的索引,为 y 使用命名列。

使用命名列的示例

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

我想要的(伪造的例子)

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

这显然会抛出:

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

丑修复

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

您只能在 px.scatter() 的 x 和 y 参数处传递列名。虹膜数据集中似乎没有名为 "index" 的列。

您可以将其留空,如下所示:

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

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

您可以显式传递索引作为参考。

所以在你的情况下,这将是:

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

--

奖金问题:如果 iris 有一个 pd.MultiIndex 怎么办?

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