Pandas DataFrame 图:从 MultiIndex 中为 secondary_y 指定列

Posted

技术标签:

【中文标题】Pandas DataFrame 图:从 MultiIndex 中为 secondary_y 指定列【英文标题】:Pandas DataFrame plot: specify column from MultiIndex for secondary_y 【发布时间】:2018-11-02 03:40:49 【问题描述】:

我正在绘制一个多索引列 DataFrame。

使用pandas DataFrame 的.plot 方法指定要在secondary_y 上绘制的列的语法是什么?

设置

import numpy as np
import pandas as pd

mt_idx = pd.MultiIndex.from_product([['A', 'B'], ['first', 'second']])
df = pd.DataFrame(np.random.randint(0, 10, size=(20, len(mt_idx))), columns=mt_idx)

我的尝试

df.plot(secondary_y=('B', 'second'))
df.plot(secondary_y='(B, second)')

上述方法均无效,因为所有线都绘制在主 y 轴上。

【问题讨论】:

根据文档,您应该能够使用传递元组或列表的形式。但我也试过了,还是不行。 【参考方案1】:

您可能会drop the upper column index level。如果您不想修改原始数据框,可以在其副本上完成。

df2 = df.copy()
df2.columns = df2.columns.map('_'.join)

df2.plot(secondary_y=('B_second'))

【讨论】:

df2.columns = df2.columns.map('_'.join) 更干净 :)【参考方案2】:

一种可能的解决方案是绘制每一列,然后指定secondary=True。按照以下方式执行此操作需要您指定它们将被绘制到的轴:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

mt_idx = pd.MultiIndex.from_product([['A', 'B'], ['first', 'second']])
df = pd.DataFrame(np.random.randint(0, 10, size=(20, len(mt_idx))), columns=mt_idx)

df.A.plot(ax=ax)
df.B.plot(ax=ax, secondary_y=True)

plt.show()

【讨论】:

以上是关于Pandas DataFrame 图:从 MultiIndex 中为 secondary_y 指定列的主要内容,如果未能解决你的问题,请参考以下文章

从Pandas DataFrame绘制条形图

从 Pandas DataFrame 构建 NetworkX 图

Pandas DataFrame 图:从 MultiIndex 中为 secondary_y 指定列

python 从ArcGIS Online上的要素图层集合中搜索,选择和生成pandas DataFrame。

Pandas Dataframe 到 Seaborn 分组条形图

python pandas.DataFrame.plot()画出来的图如何显示x轴出来。