【问题标题】:Plot dataframe columns against each other相互绘制数据框列
【发布时间】:2017-05-18 20:50:15
【问题描述】:

我有这个 df:

      CET    MaxTemp  MeanTemp MinTemp  MaxHumidity  MeanHumidity  MinHumidity  revenue     events
0  2016-11-17   11      9        7            100           85             63   385.943800    rain
1  2016-11-18   9       6        3             93           83             66  1074.160340    storm
2  2016-11-19   8       6        4             93           87             76  2980.857860    
3  2016-11-20   10      7        4             93           84             81  1919.723960    rain-thunderstorm
4  2016-11-21   14     10        7            100           89             77   884.279340
5  2016-11-22   13     10        7             93           79             63   869.071070
6  2016-11-23   11      8        5            100           91             82   760.289260    fog-rain
7  2016-11-24   9       7        4             93           80             66  2481.689270
8  2016-11-25   7       4        1             87           74             57  2745.990070
9  2016-11-26   7       3       -1            100           88             61  2273.413250    rain 
10 2016-11-27  10       7        4            100           81             66  2630.414900    fog

地点:

CET                  object
Mean TemperatureC     int64
Mean Humidity         int64
Events               object
revenue              object
dtype: object

我想将所有列相互绘制,看看它们如何随时间变化。因此,x 轴将是列CET,y 轴将包含其余列。我怎样才能做到这一点?我用过:

plt.figure();
df.plot(kind='line')
plt.xticks(rotation='vertical')
plt.yticks()
pylab.show()

但我只能看到平均温度 C 和平均湿度。 而且,x轴不是CET日期值,而是行号

【问题讨论】:

  • This 肯定会帮助您创建多个 y 轴。
  • 查看链接页面上的多个 y 轴部分。
  • 我想使用 df 列作为 x 和 y 轴(而不是 x=[1, 2, 3], y=[40, 50, 60] ),但它给了我一个关键错误,这是为什么?
  • 只是 x 必须是 CET 值的列表,y 必须是对应的其他列值的列表。
  • 如何将 x 声明为 CET 值列表?

标签: python pandas matplotlib dataframe plt


【解决方案1】:

据我所知,plot 使用 x 值的索引。 试试:

df.set_index('CET').plot()

并且您应该确保所有列都具有数字数据类型。

编辑:

df = df.set_index('CET')
num_cols = ['MaxTemp',
            'MeanTemp',
            'MinTemp',
            'MaxHumidity',
            'MeanHumidity',
            'MinHumidity',
            'revenue']
df[num_cols] = df[num_cols].astype(float)
df[num_cols].plot()
plt.xticks(range(len(df.index)), df.index)

【讨论】:

  • 如何在 x 轴上显示“CET”列的所有值?它只显示一些 xticks,但不是全部
  • 而且,由于我的所有列都必须是数字,我如何将类型“object”转换为“int64”?我试过df = df.convert_objects(convert_numeric = True),但“事件”列仍然是对象
  • 您的示例数据中没有“事件”。但我更新了我的答案。
  • 你说得对,我更新了添加事件列的问题。我尝试了您的建议,但收到此错误ValueError: could not convert string to float: 'fog-rain'
  • 当然不能将字符串转换为数字。哪个数字代表“雾”? ;-) 因此,当您转换值时,请确保只选择数字列。
【解决方案2】:

plot.lineplot.scatter 等 pandas 绘图例程可以采用 xy 参数的列名:

例如

>>> lines = df.plot.line(x='pig', y='horse')
>>> ax1 = df.plot.scatter(x='length',
...                       y='width',
...                       c='DarkBlue')

【讨论】:

    【解决方案3】:

    要将列相互绘制,您可以使用pairplot

    【讨论】:

      【解决方案4】:

      查看 seaborn 的“pairplot”和 pandas “scattermatrix”

      【讨论】:

        猜你喜欢
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 2018-08-01
        • 1970-01-01
        • 2020-08-14
        • 2020-09-21
        • 2013-12-25
        • 2017-06-09
        相关资源
        最近更新 更多