pandas中的绘图函数

内容概要


Series和DataFrame都有一个都有一个生成各类图标的plot方法,默认情况下锁生成的都是线形图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

线形图

简单示例Series图例表示.plot()

线性图可以用来表示增长的趋势或者是y和x轴的关系体现

x = np.linspace(0,10,11)
#x=y
pd.Series(x).plot()

x = np.linspace(-np.pi,np.pi)
pd.Series(np.sin(x)).plot()
pd.Series(np.cos(x)).plot()

x = np.linspace(-np.pi,np.pi) 
pd.Series(np.exp(-x**2)).plot(color='red',alpha=.6)


简单的DataFrame图标实例.plot()

#DataFrame中的每一列就是一个Series
X = pd.DataFrame(np.random.randint(0,150,(100,3)))
X.plot()

柱状图

DataFrame柱状图例

  • ‘line’ : line plot (default)
  • ‘bar’ : vertical bar plot
  • ‘barh’ : horizontal bar plot
  • ‘hist’ : histogram
  • ‘box’ : boxplot
  • ‘kde’ : Kernel Density Estimation plot
  • ‘density’ : same as ‘kde’
  • ‘area’ : area plot
  • ‘pie’ : pie plot
  • ‘scatter’ : scatter plot
  • ‘hexbin’ : hexbin plot
X = pd.DataFrame(np.random.randint(10,100,(12,2)),columns=['A','B'],index=np.arange(1,13))
#index是时间序列
X.plot(kind='bar')

X.plot(kind='barh')

直方图

首先直方图只需要一维的数据,统计基数图形

x = np.random.randint(0,10,10)
#bins=20 间隔
pd.Series(x).plot(kind='hist',bins=20)

随机百分比密度图

x = np.random.randint(0,10,10)
pd.Series(x).plot(kind='hist',bins=20)

pd.Series(x).plot(kind='kde')


这两张表经常会被画在一起,直方图以规格形式给出(以便画出密度图),然后在再其上绘制核密度估计。

接下来看看一个由两个不同de 标准正太正太分布组成的双峰分布。

np.random.normal()正太分布函数

直方图hist,函数中心必须添加属性normed = True

pd.Series(x).plot(kind='hist',bins=20,normed=True)
pd.Series(x).plot(kind='kde')

散布图

机器学习使用的比较多的一种图形

散布图可以描述数据的分布状态和数据的增长趋势以及x和y轴的关系

import seaborn as sns

汽车排放量越小,行驶的距离就越远

mpg = sns.load_dataset('mpg')
mpg.plot(x='mpg',y='displacement',kind='scatter')

iris = sns.load_dataset('iris')
#iris鸢尾花  150个样本 一个三个类别 每种花50个样本
#x和y 不相关
plt.scatter(iris.iloc[:,0],iris.iloc[:,1],c=iris.iloc[:,-1].astype('category').cat.codes)

iris.plot(x='petal_length',y='petal_width',kind='scatter')

散布图  善不图是观察两个一维数据列之间的关系的有效方法

注意是用kind='scatter'  给标签columns 
散布图矩阵,当有多个时,两两点之间的联系

函数:pd.plotting.scatter_matrix(),注意参数diagnol:对角线
#y轴 == x轴    完全相关
x = np.linspace(0,10,10)
plt.scatter(x=x,y=x)

#y轴  x轴  幂次相关
x = np.linspace(0,10,10)
plt.scatter(x=x,y=x**2)

x = np.linspace(0,10,10)
plt.scatter(x=x,y=x**.5)

a=pd.plotting.scatter_matrix(iris,figsize=(18,18),diagonal='kde')
#鸢尾花的4列互相对比
#比较的是列和列之间的相关性
#因果问题   相关问题

#比如说:电商的运营,发现相关性的事情,广州的人一到夏季,在网上买凉茶
#很多的相关性问题可以得到因果问题
#公交车司机

箱线图(补充)

male = np.random.randint(25,55,20)
male

female = np.random.randint(22,42,20)
female

data = np.c_[male,female]
data

#检测本公司男性和女性的年龄范围
df = pd.DataFrame(data)
df.plot.box(title="age")#中间那条线是中位数