Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib:一次打印多个图形_Python_Python 3.x_Matplotlib_Pandas Groupby - Fatal编程技术网

Python matplotlib:一次打印多个图形

Python matplotlib:一次打印多个图形,python,python-3.x,matplotlib,pandas-groupby,Python,Python 3.x,Matplotlib,Pandas Groupby,我正在处理3个具有相同列结构成员和类型的熊猫数据帧,只是数据集用于不同的年份 我想为每一个数据帧绘制ECDF,但每次我这样做时,我都缺乏python技能。同样,其中一个数字在x轴上的比例不同,这使得比较起来有点困难。我是这样做的 import numpy as np import pandas as pd import matplotlib.pyplot as plt from empiricaldist import Cdf df1 = pd.read

我正在处理3个具有相同列结构成员和类型的熊猫数据帧,只是数据集用于不同的年份

我想为每一个数据帧绘制ECDF,但每次我这样做时,我都缺乏python技能。同样,其中一个数字在x轴上的比例不同,这使得比较起来有点困难。我是这样做的

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from empiricaldist import Cdf

    df1 = pd.read_csv('2016.csv')
    df2 = pd.read_csv('2017.csv')
    df3 = pd.read_csv('2018.csv')

    #some info about the dfs
    df1.columns.values
    array(['id', 'trip_id', 'distance', 'duration', 'speed', 'foot', 'bike',
       'car', 'bus', 'metro', 'mode'], dtype=object)

    modal_class = df1['mode']
    print(modal_class[:5])
    0         bus
    1         metro
    2         bike
    3         foot
    4         car

    def decorate_ecdf(title, x, y):
        plt.xlabel(x)
        plt.ylabel(y)
        plt.title(title)

    #plotting the ecdf for 2016 dataset
    for name, group in df1.groupby('mode'):
        Cdf.from_seq(group.speed).plot()    
    title, x, y = 'Speed distribution by travel mode (April 2016)','speed (m/s)', 'ECDF'
    decorate_ecdf(title,x,y)

    #plotting the ecdf for 2017 dataset
    for name, group in df2.groupby('mode'):
        Cdf.from_seq(group.speed).plot()    
    title, x, y = 'Speed distribution by travel mode (April 2017)','speed (m/s)', 'ECDF'
    decorate_ecdf(title,x,y)

    #plotting the ecdf for 2018 dataset
    for name, group in df3.groupby('mode'):
        Cdf.from_seq(group.speed).plot()    
    title, x, y = 'Speed distribution by travel mode (April 2018)','speed (m/s)', 'ECDF'
    decorate_ecdf(title,x,y)
输出:

我敢肯定,这不是蟒蛇主义者的做法,而是完成工作的肮脏方式。您还可以看到2018绘图在x轴上的缩放方式不同

有没有办法强制所有图形都以相同的方式缩放? 如何重新编写代码,以便通过调用一次函数绘制图形?
使用pyplot时,可以使用plt.plot的隐式方法进行打印,也可以使用显式方法,通过使用fig(ax=plt.SubPlot)创建和调用地物和轴对象。在我看来,这里发生的事情是使用隐式方法的副作用

例如,可以使用两个pd.DataFrame.plot命令,通过将返回的轴提供给另一个函数,使它们共享同一个轴

foo=pd.DataFramedicta=[1,2,3],b=[4,5,6] bar=pd.DataFramedictc=[3,2,1],d=[6,5,4] ax=foo.plot bar.plotax=ax对象已更新 ax.图[0,3],[1,1],'k-' 也可以先前创建地物和轴对象,并根据需要提供。此外,拥有多个绘图命令也是一个完美的文件。通常情况下,我的代码25%工作,75%摆弄绘图。不要试图变得聪明而失去可读性

图,轴=plt。子批次行=3,ncols=1,共享x=真 在本例中,轴是具有3个轴对象的numpy阵列 您可以使用索引访问对象 所有都将具有相同的x范围 轴[0]。绘图[-1,2],[1,1] 轴[1]。绘图[-2,1],[1,1] 轴[2]。绘图[1,3],[1,1] 因此,您可以将这两个代码段组合到您自己的代码中。首先,创建figure和axis对象,然后绘制每个数据帧,但使用关键字ax为它们提供正确的轴

另外,假设有三个轴对象,它们的x限制不同。您可以将它们全部获取,然后将三个设置为具有相同的最小值和相同的最大值。例如:

axis_list=[ax1、ax2、ax3]假设您分别创建了这些轴,并希望强制执行相同的轴限制 最小\u x=min[ax.get\u xlim[0]用于轴\u列表中的ax] 最大\u x=最大[ax.get\u xlim[1]用于轴\u列表中的ax] 对于轴列表中的ax: ax.set\u xlimminimum\u x,maximum\u x
这已经被问了好几次了。搜索网站。我看看能不能找到链接。答案的核心是将子地块与plt.subplot一起使用,然后设置参数以在子地块之间共享x轴。感谢您提供此详细答案。我觉得它非常有用。