【问题标题】:How to make a x y line plot with python?如何用python制作x y线图?
【发布时间】:2017-07-11 14:08:38
【问题描述】:

您好,我有以下数据框:

df = [{'Column1': 1, 'Colunm2': 'A', 'Colunm3': 2}, 
      {'Column1': 2, 'Colunm2': 'A', 'Colunm3': 4},
      {'Column1': 3, 'Colunm2': 'A', 'Colunm3': 1},
      {'Column1': 1, 'Colunm2': 'B', 'Colunm3': 7},
      {'Column1': 2, 'Colunm2': 'B', 'Colunm3': 2},
      {'Column1': 3, 'Colunm2': 'B', 'Colunm3': 9}]

如何在 Column1Colunm3 之间绘制 X Y 图,但绘制两条不同的线,一条用于值 Colunm2 = 'A',另一条用于值 Colunm2 ='B'

【问题讨论】:

标签: python pandas plot


【解决方案1】:

IIUC:

import pandas as pd
df1 = pd.DataFrame(df)
fig,ax = plt.subplots()
for i,g in df1.groupby('Colunm2'):
    g.plot('Column1','Colunm3',ax=ax,label=i)

【讨论】:

  • 这是一个更通用的答案,它利用了专门为groupby 对象实现绘图这一事实。在我看来(pandas,而不是答案)的唯一缺点是您应该能够在一次调用中将标签列表传递给.plot,即g.plot('Column1','Colunm3',ax=ax,label=['A', 'B'])
  • @BradSolomon 您可以使用 Seaborn 使用 hue 参数完全做到这一点。
  • sns.lmplot?
【解决方案2】:

正如@ScottBoston 在他的评论中所指出的,还有sns.pointplot,其中hue 参数实际上是一个groupby。

import sns.apiponly as sns
sns.pointplot('Column1', 'Colunm3', data=DataFrame(df), hue='Colunm2')
plt.ylabel('Colunm3')

【讨论】:

    【解决方案3】:

    你可以试试这个:

    import matplotlib.pyplot as plt
    
    df = [{'Column1': 1, 'Colunm2': 'A', 'Colunm3': 2},
          {'Column1': 2, 'Colunm2': 'A', 'Colunm3': 4},
          {'Column1': 3, 'Colunm2': 'A', 'Colunm3': 1},
          {'Column1': 1, 'Colunm2': 'B', 'Colunm3': 7},
          {'Column1': 2, 'Colunm2': 'B', 'Colunm3': 2},
          {'Column1': 3, 'Colunm2': 'B', 'Colunm3': 9}]
    
    first = [(i["Column1"], i['Colunm3'])  for i in df if i['Colunm2'] == 'A']
    second = [(i["Column1"], i['Colunm3']) for i in df if i['Colunm2'] == 'B']
    
    
    plt.plot([a for a, b in first], [b for a, b in first])
    plt.plot([a for a, b in second], [b for a, b in second])
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2010-12-06
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多