在熊猫,我正在做:
bp = p_df.groupby('class').plot(kind='kde')
p_df
是dataframe
个对象。
然而,这产生了两个图,每个类一个。 如何在同一个图中强制同时使用两个类的一个图?
答案 0 :(得分:56)
您可以创建轴,然后使用DataFrameGroupBy.plot
的ax
关键字将所有内容添加到这些轴:
import matplotlib.pyplot as plt
p_df = pd.DataFrame({"class": [1,1,2,2,1], "a": [2,3,2,3,2]})
fig, ax = plt.subplots(figsize=(8,6))
bp = p_df.groupby('class').plot(kind='kde', ax=ax)
结果如下:
不幸的是,传说的标签在这里没有多大意义。
另一种方法是循环遍历组并手动绘制曲线:
classes = ["class 1"] * 5 + ["class 2"] * 5
vals = [1,3,5,1,3] + [2,6,7,5,2]
p_df = pd.DataFrame({"class": classes, "vals": vals})
fig, ax = plt.subplots(figsize=(8,6))
for label, df in p_df.groupby('class'):
df.vals.plot(kind="kde", ax=ax, label=label)
plt.legend()
这样您就可以轻松控制图例。这是结果:
答案 1 :(得分:8)
另一种方法是使用context!.setStrokeColor(UIColor.red.cgColor)//or any UIColor
模块。这将绘制相同轴上的两个密度估计,而不指定用于保持轴的变量,如下所示(使用另一个答案中的一些数据框设置):
seaborn
这会产生以下图像。
答案 2 :(得分:1)
也许您可以尝试以下方法:
fig, ax = plt.subplots(figsize=(10,8))
classes = list(df.class.unique())
for c in classes:
df2 = data.loc[data['class'] == c]
df2.vals.plot(kind="kde", ax=ax, label=c)
plt.legend()
答案 3 :(得分:1)
import matplotlib.pyplot as plt
p_df.groupby('class').plot(kind='kde', ax=plt.gca())
答案 4 :(得分:0)
pandas.DataFrame.groupby
时,应指定要绘制的列(例如聚合列)。seaborn.kdeplot
或 seaborn.displot
并指定 hue
参数pandas v1.2.4
、matplotlib 3.4.2
、seaborn 0.11.1
kde
,但许多绘图类型(例如 kind='line'
、sns.lineplot
等)的步骤相同。'kind'
列中,将绘制 kde
的 'duration'
,忽略 'waiting'
。import pandas as pd
import seaborn as sns
df = sns.load_dataset('geyser')
# display(df.head())
duration waiting kind
0 3.600 79 long
1 1.800 54 short
2 3.333 74 long
3 2.283 62 short
4 4.533 85 long
pandas.DataFrame.plot
绘图.groupby
或 .pivot
重塑数据.groupby
['duration']
和 kind='kde'
。ax = df.groupby('kind')['duration'].plot(kind='kde', legend=True)
.pivot
ax = df.pivot(columns='kind', values='duration').plot(kind='kde')
seaborn.kdeplot
绘图hue='kind'
ax = sns.kdeplot(data=df, x='duration', hue='kind')
seaborn.displot
绘图hue='kind'
和 kind='kde'
fig = sns.displot(data=df, kind='kde', x='duration', hue='kind')