我正在尝试使用 Seaborn 使我的绘图在视觉上比 matplotlib 更好。我有一个数据集,其中有一列“年份”,我想在 X 轴上绘制它,并使用不同颜色的线在 Y 轴上绘制 4 列 A、B、C、D。我试图使用 sns.lineplot 方法来做到这一点,但它只允许 X 轴上有一个变量,Y 轴上只有一个变量。我尝试这样做
sns.lineplot(data_preproc['Year'],data_preproc['A'], err_style=None)
sns.lineplot(data_preproc['Year'],data_preproc['B'], err_style=None)
sns.lineplot(data_preproc['Year'],data_preproc['C'], err_style=None)
sns.lineplot(data_preproc['Year'],data_preproc['D'], err_style=None)
但这样我就不会在图中得到图例来显示哪条彩色线对应于哪条线。我尝试检查文档,但找不到正确的方法来执行此操作。
Seaborn 更喜欢“长格式”作为输入。将 DataFrame 从“宽格式”(每种测量类型一列)转换为长格式(一列用于所有测量值,一列表示类型)的关键要素是pandas.melt https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.melt.html。给定一个data_preproc
结构与您的类似,填充随机值:
num_rows = 20
years = list(range(1990, 1990 + num_rows))
data_preproc = pd.DataFrame({
'Year': years,
'A': np.random.randn(num_rows).cumsum(),
'B': np.random.randn(num_rows).cumsum(),
'C': np.random.randn(num_rows).cumsum(),
'D': np.random.randn(num_rows).cumsum()})
具有四条线的单图,每种测量类型一条线,通过以下方式获得
sns.lineplot(x='Year', y='value', hue='variable',
data=pd.melt(data_preproc, ['Year']))
(请注意,“值”和“变量”是返回的默认列名称melt
,并且可以根据您的喜好进行调整。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)