记录一下matplotlib的常用绘图,不用反复去百度了
1. CDF & PDF
from scipy import stats
import numpy as np
# data是一个list,存放数据
res = stats.relfreq(data, numbins=30)
# numbins是bin的个数,会影响统计的粗略程度
x = res.lowerlimit + np.linspace(0,
res.binsize*res.frequency.size,
res.frequency.size)
pdf = res.frequency
cdf = np.cumsum(res.frequency)
# 绘制CDF曲线
plt.plot(x,cdf)
plt.ylabel('CDF', fontsize=18)
plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
plt.show()
# 绘制PDF柱状图(也可以绘制曲线,用plt.plot即可)
plt.bar(x, pdf, width=res.binsize)
plt.ylabel('PDF', fontsize=18)
plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
plt.show()
2. 箱图
plt.boxplot([data1, data2], labels=['Data1', 'Data2'])
'''
labels会自动变为xticks,无需legend处理
设置 notch=True,箱图在中位线处变凹
设置 vert=True,箱图变垂直
设置 whis,上下限系数,默认为1.5
设置 widths,箱图宽度
设置 patch_artist=True,箱体是否有颜色填充
设置 showmeans=True,显示平均值
设置 showcaps=False,隐藏上下限的线条
设置 showbox=False,隐藏箱体
设置 showfliers=False,隐藏异常值
另外还有一些绘图样式的设置,例如线型,点型等,暂不整理,随用随补
'''
另外附一个箱图计算函数
def anomaly_filter(series, threshold=1.5):
series_sort = np.sort(series.copy())
n = len(series)
idx_Q1 = (n + 1) / 4
idx_Q3 = (n + 1) * 3 / 4
Q1 = series_sort[int(idx_Q1) - 1] * (1 - idx_Q1 + int(idx_Q1)) + series_sort[int(idx_Q1)] * (idx_Q1 - int(idx_Q1))
Q3 = series_sort[int(idx_Q3) - 1] * (1 - idx_Q3 + int(idx_Q3)) + series_sort[int(idx_Q3)] * (idx_Q3 - int(idx_Q3))
IQR = Q3 - Q1
series_filtered = []
for s in series:
if Q1 - threshold * IQR <= s <= Q3 + threshold * IQR:
series_filtered.append(s)
return Q1 - threshold * IQR, Q1 + threshold * IQR, series_filtered
3. 柱状图
3.1. 直接用dataframe绘制柱状图
df.plot(kind='bar', color=color_list)
'''
用index作为横坐标,columns作为label(需要plt.legend)
color_list是一个存放颜色的list,给不同的columns赋颜色,多则取前,少则复用
后续可以按照matplotlib的方法对图进行操作
'''
plt.xticks(rotation=0) # 上述方法生成的柱状图通常横坐标是竖着的,可以通过这个方法转回来