基于行的图表(Seaborn 或 Matplotlib)

Posted

技术标签:

【中文标题】基于行的图表(Seaborn 或 Matplotlib)【英文标题】:Row based chart plot (Seaborn or Matplotlib) 【发布时间】:2015-07-08 03:07:30 【问题描述】:

鉴于我的数据是 pandas 数据框,看起来像这样:

            Ref   +1    +2    +3    +4    +5    +6    +7  
 2013-05-28  1  -0.44  0.03  0.06 -0.31  0.13  0.56  0.81 
 2013-07-05  2   0.84  1.03  0.96  0.90  1.09  0.59  1.15 
 2013-08-21  3   0.09  0.25  0.06  0.09 -0.09 -0.16  0.56 
 2014-10-15  4   0.35  1.16  1.91  3.44  2.75  1.97  2.16 
 2015-02-09  5   0.09 -0.10 -0.38 -0.69 -0.25 -0.85 -0.47 

如何绘制 5 条线(每个参考 1 条)的图表,其中 X 轴是列(+1、+2...),并从 0 开始?如果在seaborn,那就更好了。但也欢迎使用 matplotlib 解决方案。

【问题讨论】:

我很确定如果我复制并粘贴,我会在任何版本的 python 中遇到语法错误 .... @JoranBeasley 用pandas.read_clipboard() 读起来很好,比很多熊猫问题要好。 @JoranBeasley 你建议我应该改进什么? @hernanavella:对于 pandas 问题,您可以做的最好的事情是确保人们可以将您帖子中的行复制粘贴到他们的 Python 控制台中,并准备好示例数据的数据框。你很幸运,如果你只是复制它并执行df = pandas.read_clipboard(),你的数据框就可以正常工作,所以可能会在你的帖子中提到这一点。 我知道我迟到了,但你应该检查一下 build in parallel_coordinates 方法。 pandas.pydata.org/pandas-docs/stable/… 【参考方案1】:

在 pandas 中绘制数据框通常都是为了重塑表格,以便您想要的各个行位于单独的列中,并且 x 值位于索引中。其中一些重塑操作有点难看,但你可以这样做:

df = pd.read_clipboard()
plot_table = pd.melt(df.reset_index(), id_vars=['index', 'Ref'])
plot_table = plot_table.pivot(index='variable', columns='Ref', values='value')
# Add extra row to have all lines start from 0:
plot_table.loc['+0', :] = 0
plot_table = plot_table.sort_index()
plot_table
Ref          1     2     3     4     5
variable                              
+0        0.00  0.00  0.00  0.00  0.00
+1       -0.44  0.84  0.09  0.35  0.09
+2        0.03  1.03  0.25  1.16 -0.10
+3        0.06  0.96  0.06  1.91 -0.38
+4       -0.31  0.90  0.09  3.44 -0.69
+5        0.13  1.09 -0.09  2.75 -0.25
+6        0.56  0.59 -0.16  1.97 -0.85
+7        0.81  1.15  0.56  2.16 -0.47

现在你有一个形状正确的表格,绘图是非常自动的:

plot_table.plot()

【讨论】:

如果我想让所有的行都从 0 开始,我唯一的选择是添加一列?

以上是关于基于行的图表(Seaborn 或 Matplotlib)的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn:注释线性回归方程

基于行的数据库或基于列的数据库

如何在 Seaborn 中叠加两个图表?

Seaborn的简述

python 绘制多个图表 - Seaborn(sns)

Python图表分布数据可视化:Seaborn