【问题标题】:panda plot multiple lines base on a certain columnpanda 根据某列绘制多行
【发布时间】:2017-08-23 23:53:40
【问题描述】:

我有一个这样的数据框

timestamp|type|value_1|value_2

t1|A|v1|v2

t2|B|v3|v4

t3|C|v5|v6

t4|A|v7|v8

我想绘制一个图表,每个类型和值都有 6 条线 例如

type A - value_1
type A - value_2

type B - value_1
type B - value_2

type C - value_1
type C - value_2

谢谢,

就是这样

A = df[df["type"] == A]

A.plot(x="time", y=["value_1", "value_2"])

对三种类型执行此操作 并将这 6 条线合并到同一张图上

【问题讨论】:

  • 我可以帮你格式化吗?
  • anf 回答,如果value_1value_2 是数字,你需要df.set_index('type').plot() 吗?
  • 我正在尝试格式化表格..
  • 是的,value_1 和 value_2 都是数字
  • 正确格式需要 4 个空格。

标签: python pandas plot


【解决方案1】:

就绘图而言,我建议您查看: MatPlotLib: Multiple datasets on the same scatter plotMultiple data set plotting with matplotlib.pyplot.plot_date 以及 this tutorial

对于要绘制的数据的选择,我推荐pandas docs 中的“按标签选择”部分。我想您可以将相应列/行中的值存储在一些临时变量 x1 - xny1 - yn 中,然后绘制所有对,这可能看起来像:

xs = sheet.loc[<appropriate labels>]
ys = sheet.loc[<appropriate labels>]
for i in range(len(xs)):
   plt.plot(xs[i],ys[i],<further arguments>)
plt.show()

在您的情况下,仅访问“值”标签可能还不够,因为只有该列的每个第 n 个元素才属于任何给定类型。在this question 中,您可以看到如何获得一个仅包含适当值的新列表。基本上是这样的:

allXs = sheet.loc['v1']
xsTypeA = allXs[1::4]
...

希望有帮助。

【讨论】:

    【解决方案2】:

    我认为您可以将DataFrame 重新整形为列,然后将plot

    df['g'] = df.groupby('type').cumcount()
    df = df.set_index(['timestamp','g', 'type']).unstack().reset_index(level=1, drop=True)
    df.columns = df.columns.map('_'.join)
    
    df.plot()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 2021-08-28
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 2019-08-19
      • 2018-11-17
      相关资源
      最近更新 更多