【问题标题】:Python: How can I use ggplot with a simple 2 column array?Python:如何将 ggplot 与简单的 2 列数组一起使用?
【发布时间】:2013-10-30 02:35:46
【问题描述】:

我尝试使用ggplot for python 我有以下数据:

power_data = [[  4.13877565e+04,   2.34652000e-01],
[  4.13877565e+04,   2.36125000e-01],
[  4.13877565e+04,   2.34772000e-01],
...
[  4.13882896e+04,   2.29006000e-01],
[  4.13882896e+04,   2.29019000e-01],
[  4.13882896e+04,   2.28404000e-01]]

我想用 ggplot 表示它:

print ggplot(aes(x='TIME', y='Watts'), data=power_data) + \
    geom_point(color='lightblue') + \
    geom_line(alpha=0.25) + \
    stat_smooth(span=.05, color='black') + \
    ggtitle("Power comnsuption over 13 hours") + \
    xlab("Time") + \
    ylab("Watts")

但得到错误:

  File "C:\PYTHON27\lib\site-packages\ggplot\ggplot.py", line 59, in __init__
    for ae, name in self.aesthetics.iteritems():
AttributeError: 'list' object has no attribute 'iteritems'
>>>

我不知道aes(x='TIME', y='Watts') 应该做什么。

如何格式化power_data 列表,以便可以将它与ggplot 一起使用,我希望第一列在时间x 轴上表示,第二列在功率y 轴上?

如果我尝试使用 meat 示例,它不会显示任何内容,只会显示

>>> print (ggplot(aes(x='date', y='beef'), data=meat) + \
...     geom_line())
<ggplot: (20096197)>
>>>

我应该怎么做才能进一步显示图形?

【问题讨论】:

    标签: python python-2.7 pandas python-ggplot


    【解决方案1】:

    我错过了 3 个重要步骤:

    1) 首先数据需要采用如下格式:

    [{'TIME': 41387.756495162001, 'Watts': 0.234652},
     {'TIME': 41387.756500821, 'Watts': 0.236125},
     {'TIME': 41387.756506480997, 'Watts': 0.23477200000000001},
     {'TIME': 41387.756512141001, 'Watts': 0.23453099999999999},
    ...
     {'TIME': 41387.756574386003, 'Watts': 0.23558699999999999},
     {'TIME': 41387.756580046, 'Watts': 0.23508899999999999},
     {'TIME': 41387.756585706004, 'Watts': 0.235041},
     {'TIME': 41387.756591365003, 'Watts': 0.23541200000000001},
     {'TIME': 41387.756597013002, 'Watts': 0.23461699999999999},
     {'TIME': 41387.756602672998, 'Watts': 0.23483899999999999}]
    

    2) 那么数据需要用DataFrame修饰

    powd = DataFrame(data2)
    

    3)如果没有plt.show(1),情节将不会显示

    解决上述问题的代码如下:

    from pandas import DataFrame
    data2 = []
    for i in range(0,len(power_data)):
        data2.append({'TIME': power_data[i][0], 'Watts': power_data[i][1]})
    
    powd = DataFrame(data2)
    print powd
    
    # the above can be changed with this line:
    # powd = DataFrame(power_data, columns=['TIME', 'Watts'])
    # see sugestion in comments 
    
    print ggplot(aes(x='TIME', y='Watts'), data=powd) + \
        geom_point(color='lightblue') + \
        geom_line(alpha=0.25) + \
        stat_smooth(span=.05, color='black') + \
        ggtitle("Power comnsuption over 13 hours") + \
        xlab("Time") + \
        ylab("Watts")
    

    或者在没有for 的情况下一次性通过,如comment 中提供的那样:

    powd = DataFrame(power_data, columns=['TIME', 'Watts'])
    print ggplot(aes(x='TIME', y='Watts'), data=powd) + \
            geom_point(color='lightblue') + \
            geom_line(alpha=0.25) + \
            stat_smooth(span=.05, color='black') + \
            ggtitle("Power comnsuption over 13 hours") + \
            xlab("Time") + \
            ylab("Watts")
    

    【讨论】:

    • 仅供参考,您不需要更改数据的格式。您可以使用 powd = DataFrame(power_data, columns=['TIME', 'Watts']) 的原始格式创建所需的数据框
    【解决方案2】:

    我们还可以使用 ggplot 库 qplot 中的另一个函数来绘制图形。假设上述数据集 power_data 作为输入。我们可以将其绘制为:

    import qplot from ggplot qplot(power_data[:,0], power_data[:,1], type='l')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 2019-11-29
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2021-07-05
      相关资源
      最近更新 更多