【发布时间】:2020-01-10 20:37:06
【问题描述】:
我正在使用具有相同列结构(数字和类型)的 3 个熊猫 dataframes,只是数据集是针对不同年份的。
我想为每个数据帧绘制ECDF,但每次我这样做时,我都会单独进行(缺乏 python 技能)。同样,其中一个数字(2018 年)在 x-axis 上的缩放比例不同,这使得比较有点困难。这是我的做法。
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)
输出:
我很确定这不是 pythonist 的做法,而是一种完成工作的肮脏方式。您还可以查看 2018 年图在 x 轴上的不同缩放比例。
- 有没有办法强制所有数字都以相同的方式缩放?
- 如何重写我的代码,以便通过调用一次函数来绘制图形?
【问题讨论】:
-
这个问题已经被问过好几次了。搜索网站。我看看能不能找到链接。答案的核心是使用带有
plt.subplot()的子图,然后设置参数以跨子图共享 x 轴。
标签: python python-3.x matplotlib pandas-groupby