如何在linegraph的Y轴上绘制两列单个DataFrame

时间:2017-12-12 14:38:42

标签: python pandas matplotlib plot data-science

我有数据框total_year,其中包含三列(年,动作,喜剧)。

total_year

enter image description here

我想在Y轴上绘制年份列,在Y轴上绘制(动作和喜剧)。

如何在Y轴上绘制两列(aciton和喜剧)。 这是我的代码。它在Y轴上仅绘制1列。

total_year[-15:].plot(x='year', y='action' ,figsize=(10,5), grid=True  )

4 个答案:

答案 0 :(得分:13)

您可以提供多个列来绘制pandas plotting函数的y参数,而不是单个列名。那些应该被指定为列表。即:

df.plot(x="year", y=["action", "comedy"])

完整示例:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"year": [1914,1915,1916,1919,1920],
                   "action" : [2.6,3.4,3.25,2.8,1.75],
                   "comedy" : [2.5,2.9,3.0,3.3,3.4] })
df.plot(x="year", y=["action", "comedy"])
plt.show()

enter image description here

答案 1 :(得分:6)

默认情况下,

Pandas.DataFrame.plot()使用索引绘制X轴,所有其他数字列将用作Y值。

因此将year列设置为索引可以解决问题:

total_year.set_index('year').plot(figsize=(10,5), grid=True)

答案 2 :(得分:0)

可以使用下面提到的循环和代码根据特征变量的类型(无论是object / int64 / float64)使用deendent(outcome-Y)变量来绘制所有自变量/特征变量。

在这种情况下,Feature_col_X1(包含功能列表)和Target_col_Y1是目标对象,我将其传递给已定义的函数,这样我就可以将20个特征的所有图取到1

def plotforallvariables(Feature_col_X1,Target_col_Y1):
    for i in range(len(Feature_col_X1)):
        idx=Feature_col_X1[i]


        try:

            if data[idx].dtype =='O':
                #print('categorical')
                #%matplotlib inline
                #print(idx,'in X axis and also',Target_col_Y1 ,'in Y axis')




    pd.crosstab(data[idx],data[Target_col_Y1]).plot(kind='bar')
                #x=r'idx,'in X axis and also',Target_col_Y1 ,'in Y axis'
                #plt.title('x')
                #print(data[idx])
                #print(data[Target_col_Y1])
                #plt.xlabel(data[idx])
                #plt.ylabel(data[Target_col_Y1])

            elif data[idx].dtype =='int64':
                #ax = plt.gca()
                #data.plot(kind='line',x=data[idx],y=data[Target_col_Y1])
                pd.crosstab(data[idx],data[Target_col_Y1]).plot(kind='line')
                #data.plot.scatter(x=data[idx],y=data[Target_col_Y1])
                #plt.show()
                #print('integer')


            elif data[idx].dtype =='float64': 
                #print('float')
                pd.crosstab(data[idx],data[Target_col_Y1]).plot(kind='line')
                #data.plot(kind='line',x=data[idx],y=data[Target_col_Y1])

        except (ValueError,KeyError):
            print('skip error')

plotforallvariables(Feature_col_X,Target_col_Y)

答案 3 :(得分:0)

  • 使用pandas.DataFrame.plot时,仅需要为x参数指定一列。
  • 需要注意的是,其余带有numeric值的列将用于y
    • 以下代码包含额外的列进行演示。注意,'date'保留为string。但是,如果将'date'转换为datetime dtype,则plot API也将在y轴上绘制'date'列。
  • 如果数据框包含许多列,其中某些列不应绘制,请指定y参数,如此answer所示,但如果数据框仅包含要绘制的列,则指定仅x参数。
import pandas as pd

# test data
data = {'year': [1914, 1915, 1916, 1919, 1920],
        'action': [2.67, 3.43, 3.26, 2.82, 1.75],
        'comedy': [2.53, 2.93, 3.02, 3.37, 3.45],
        'test1': ['a', 'b', 'c', 'd', 'e'],
        'date': ['1914-01-01', '1915-01-01', '1916-01-01', '1919-01-01', '1920-01-01']}

# create the dataframe
df = pd.DataFrame(data)

# display(df)
   year  action  comedy test1        date
0  1914    2.67    2.53     a  1914-01-01
1  1915    3.43    2.93     b  1915-01-01
2  1916    3.26    3.02     c  1916-01-01
3  1919    2.82    3.37     d  1919-01-01
4  1920    1.75    3.45     e  1920-01-01

# plot the dataframe
df.plot(x='year', figsize=(10, 5), grid=True)

enter image description here