Python Seaborn调色板,带有Pandas groupby和.plot功能

Python Seaborn调色板,带有Pandas groupby和.plot功能,python,pandas,matplotlib,plot,seaborn,Python,Pandas,Matplotlib,Plot,Seaborn,当我试图用seaborn调色板绘制一些数据时,遇到了一个非常令人沮丧的问题。我的工作流程是在我的数据框上执行groupby操作,并使用如下代码将每个组绘制为自己的曲线: import seaborn as sns; sns.set_style('whitegrid') f, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(16, 6)) inner = d.groupby(['dr_min', 'dr_max']) n = len(i

当我试图用seaborn调色板绘制一些数据时,遇到了一个非常令人沮丧的问题。我的工作流程是在我的数据框上执行groupby操作,并使用如下代码将每个组绘制为自己的曲线:

import seaborn as sns; sns.set_style('whitegrid')
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(16, 6))

inner = d.groupby(['dr_min', 'dr_max'])
n = len(inner)
cmap = sns.color_palette("Blues", n_colors=n)
inner.plot(x='limit_l', y='lccdf', ax=ax1, color=cmap, legend=False)
inner.plot(x='limit_r', y='rcdf', ax=ax2, color=cmap, legend=False)
我希望看到我的每个groupby参数都有一条曲线,颜色贴图中有清晰的阴影,如下所示:

相反,我的曲线看下面,没有任何颜色等级。有人能帮我理解为什么会发生这种情况吗


您可能希望在groupby对象上进行迭代,为每一行选择颜色

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

a = np.tile(np.arange(0,10),5)
b = np.linspace(0,1,len(a))
c = np.repeat(list("ABCDE"), 10)
df = pd.DataFrame({"x":a, "y":b, "c":c})

fig, ax = plt.subplots()
cmap = sns.color_palette("Blues", n_colors=5)

inner = df.groupby(["c"])

for i, (n, gr) in enumerate(inner):
    gr.plot(x="x", y="y", ax=ax, color=cmap[i])

plt.show()

您可能希望在groupby对象上进行迭代,为每一行选择颜色

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

a = np.tile(np.arange(0,10),5)
b = np.linspace(0,1,len(a))
c = np.repeat(list("ABCDE"), 10)
df = pd.DataFrame({"x":a, "y":b, "c":c})

fig, ax = plt.subplots()
cmap = sns.color_palette("Blues", n_colors=5)

inner = df.groupby(["c"])

for i, (n, gr) in enumerate(inner):
    gr.plot(x="x", y="y", ax=ax, color=cmap[i])

plt.show()

这确实正确地生成了曲线,但我认为这里不需要循环。这对我来说就像是一个解决办法。是的,这是一个解决熊猫没有实现的特性的办法。您可能会问,为什么pandas没有实现为color参数提供多种颜色的选项。答案可能是,这将需要完全重写plotting函数,因为现在的情况是,颜色只是传递到matplotlib线图上,matplotlib中的Line2D对象正好有一种颜色与之关联。因此,有必要单独绘制多条曲线,循环是一种方便的方法。这确实可以正确生成曲线,但我认为这里不需要循环。这对我来说就像是一个解决办法。是的,这是一个解决熊猫没有实现的特性的办法。您可能会问,为什么pandas没有实现为color参数提供多种颜色的选项。答案可能是,这将需要完全重写plotting函数,因为现在的情况是,颜色只是传递到matplotlib线图上,matplotlib中的Line2D对象正好有一种颜色与之关联。因此,有必要单独绘制多条曲线,循环是一种方便的方法。