我正在为此功能而苦苦挣扎。
我需要此函数要做的是,为一列中的每个唯一值绘制X个海洋深处的探究数量(在单独的图中)。
在下面的示例中,我使用的是将虹膜数据集转换为添加了三个附加列的数据框:city
,color
,period
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats
from matplotlib import rcParams
from sklearn.datasets import load_iris
iris=load_iris()
df=pd.DataFrame(data= np.c_[iris['data'], iris['target']],columns= iris['feature_names'] + ['target'])
df['city']=np.random.choice(['New York','Paris','London'],size=len(df))
df['period']=np.random.choice(['before','after'],size=len(df))
df['color']=np.random.choice(['red','black','blue'],size=len(df))
unique_vals = df['period'].unique()
targets = [df.loc[df['period'] == val] for val in unique_vals]
for target in targets:
sns.distplot(target[[r'petal width (cm)']], hist=False,label='shouldbedynamic')
sns.distplot(target[[r'sepal width (cm)']], hist=False,label='shouldbedynamic')
plt.legend()
plt.show()
到目前为止,这段代码可以绘制我定义的两个由X变量(在这种情况下为period
)划分的度量。
假设现在我想查看完全相同的输出(相同的度量并用period
进行划分),但是对于city
列中的每个值,将是一个新的图/图产生。我当然可以通过一次过滤一个值来手动完成此操作,但是在city
具有50个唯一值的情况下,我需要一个函数来遍历并绘制50个单独的分布。
除此之外,我还有两个较小的问题:
label
选项以动态生成图例,以显示彩色线条代表什么?编辑:只想弄清楚我想要的是能够在单独的图中绘制分布(而不是在同一图中)。因此,如果city
具有50个不同的值,则图片中的相同数字将为每个城市的数据生成:纽约,巴黎,伦敦等
答案 0 :(得分:0)
您是说要50个单独的地块(每个城市一个地块,并按时期划分)吗?还是要在同一地块中分配50个(每个城市一个,而不是按时期划分)?
获取动态标签非常容易,只需使用groupby
而不是unique
for period, group in df.groupby('period'):
sns.distplot(group[[r'petal width (cm)']], hist=False, label=f'petal: {period}')
sns.distplot(group[[r'sepal width (cm)']], hist=False, label=f'sepal: {period}')
plt.legend()
您还可以设置color
的{{1}}参数以选择所需的任何颜色,但是在50个绘图中,您可能希望查看colormaps
编辑:
现在,您想要的更加清楚了,您可以尝试这样的操作
sns.distplot