数据分析--Matplotlib

基本布局对象

figure对象是所有图表绘制的基础
构建图标的主要步骤

  • 准备数据
  • 生成图表
  • 传入数据
  • 调整图标的装饰

图表样式的修改以及图表装饰的接口

Matplotlib定义详细的图标装饰项接口,能够对图表几乎每一个细节进行修改

  • 修改图表样式
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
fig,axes = plt.subplots()
t = np.arange(0,2,0.01)
s = np.sin(2*np.pi*t)
# 修改线条颜色,线条形式
axes.plot(t,s,color='k',linestyle='-')
s = np.sin(2*np.pi*(t+0.5))
axes.plot(t,s,color='c',linestyle='--')
plt.show()

常用的color参数值

color参数值 含义
r 红色
y 黄色
g 绿色
c 青色
b 蓝色
m 紫红色
w 白色

常用linesstyle参数值

linesstyle参数值 含义
- 实线
虚线(两个短横线)
-. 虚线(短横线和点交替)
: 虚线(点)
  • 修改装饰项
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
fig,axes = plt.subplots()
t = np.arange(0,2,0.01)
s = np.sin(2*np.pi*t)
# 修改线条颜色,线条形式
axes.plot(t,s,color='k',linestyle='-',label='line1')

s = np.sin(2*np.pi*(t+0.5))
axes.plot(t,s,color='c',linestyle='--',label='line2')

# ticks styles
axes.set_xticks(np.arange(0,2,0.5))
axes.set_yticks([-1,0,1])
axes.minorticks_on()

# axes position
# 对边框进行修改,隐藏右边框和上边框
axes.spines['right'].set_color('none')
axes.spines['top'].set_color('none')
# 指定边框的位置,第一个参数表示位置的种类,第二个参数表示边框的位置
# axes.spines['bottom'].set_position(('data',0))
# axes.spines['left'].set_position(('data',0))

axes.spines['bottom'].set_position('center')
axes.spines['left'].set_position('zero')
# 'center' 等于('data',0.5)
# zero 等于 ('data',0)

# legend
# 设置图例,loc  bbox_to_anchor 确定位置的参数
axes.legend(loc='upper right',bbox_to_anchor=(1.1,1))
plt.show()
  • 添加注释
import matplotlib.pyplot as plt

import  numpy as np

fig = plt.figure()
fig,axes = plt.subplots()
axes.plot(np.arange(0,24,2),[14,9,7,5,12,19,23,26,27,24,24,19],'-o')
axes.set_xticks(np.arange(0,24,2))
# 生成一个带箭头的注释
'''
axes.annotate('hottest at 16:00',xy=(16,27),xytext=(16,22),arrowprops=dict(
                facecolor = 'black',shrink=0.2),
                horizontalalignment='center',verticalalignment='center'
              )
    参数依次是 注释文字
    xy 箭头尖端位置
    xytext 注释文字位置
    arrowprops=dict(    箭头样式参数
                facecolor 箭头颜色
                shrink 箭头与文字之间的距离
                horizontalalignment verticalalignment 文字在水平位置和垂直位置向上对齐的方式
    
'''


axes.annotate('hottest at 16:00',xy=(16,27),xytext=(16,22),arrowprops=dict(
                facecolor = 'black',shrink=0.2),
                horizontalalignment='center',verticalalignment='center'
              )
'''
   axes.text() 
   参数分别为 文字的位置 注释文字 背景框的样式(课可以指定, 背景颜色 透明度 文字与背景框之间的距离)
'''
axes.text(12,10,'Date: March 26th 2018',bbox={
    
    'facecolor':'cyan','alpha':0.3,'pad':6})
plt.show()

基础图表绘制

直方图

是一种直观描述数据集集中每一个区间内数据值出现频数的统计图
通过直方图,可以大致了解数据的分布,判断数据集中的区间

import matplotlib.pyplot as plt
import numpy as np
data = np.random.standard_normal(1000)
# 分组
bins = 50
fig,axes = plt.subplots()
# 直方图
axes.hist(data,bins)
axes.set_title("Histogram")
plt.show()

# 直方图加标准正态密度函数图像
number_of_bins = 50
fig,axes = plt.subplots()
n,bins ,patch=axes.hist(data,number_of_bins,density=True)
standard_data = ((1/(np.sqrt(2*np.pi)*1))*np.exp(-0.5*(1/1*(bins-0))**2))
axes.plot(bins,standard_data,0,'-')
plt.show()

在这里插入图片描述

在这里插入图片描述

散点图

可以将样本数据绘制在二维平面上777直观的显示分布情况,初步判断两个变量之间的关系

import matplotlib.pyplot as plt
import numpy as np
n = 60
np.random.seed(100)
x = np.random.rand(n)
y = np.random.rand(n)

# plt.scatter(x,y)
fig,axes= plt.subplots()
axes.scatter(x,y)
plt.show()

# 根据值改变点大大小和颜色
n1 = 60
np.random.seed(100)
x = np.random.rand(n1)
y = np.random.rand(n1)
s = np.pi*(10*np.random.rand(n1))**2

c= -s
# plt.scatter(x,y)
fig,axes= plt.subplots()
# x y  标记点面积,颜色,透明度
axes.scatter(x,y,s,c,alpha=0.7)
plt.show()

在这里插入图片描述

在这里插入图片描述

饼图

饼图可以直观的显示某一类数据在全部样本数据的百分比

import matplotlib.pyplot as plt
import numpy as np
fig,axes = plt.subplots()
labels = 'Taxi','Metro','Walk','Bus','Bicycle','Driving'
sizes = [10,30,5,25,5,25]
explode = (0,0.1,0,0,0,0)
axes.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)
axes.axis('equal')
axes.set_title('pie chart')
plt.show()

柱状图

柱状图可以直观的反应不同类别数据之间分布情况的数量差异

import matplotlib.pyplot as plt
import numpy as np
fig,axes = plt.subplots()
data_m=(40,120,20,100,30,200)
data_f=(60,180,30,150,20,50)
index = np.arange(6)
width = 0.4
axes.bar(index,data_m,width,color='c',label='men')
axes.bar(index+width,data_f,width,color='b',label='women')
axes.set_xticks(index+width/2)
axes.set_xticklabels(('Taxi','Metro','Walk','Bus','Bicycle','Driving'))
axes.legend()
plt.show()

在这里插入图片描述

# 柱状图叠加效果,将两个柱状图叠加显示
fig,axes = plt.subplots()
data_m=(40,120,20,100,30,200)
data_f=(60,180,30,150,20,50)
width = 0.4
axes.bar(index,data_m,width,color='c',label='men')
axes.bar(index,data_f,width,color='b',bottom=data_m,label='women')
axes.set_xticks(index+width/2)
axes.set_xticks(index+width/2)
axes.set_xticklabels(('Taxi','Metro','Walk','Bus','Bicycle','Driving'))
axes.legend()
plt.show()

在这里插入图片描述

# 柱状图半重叠
fig,axes = plt.subplots()
data_m=(40,120,20,100,30,200)
data_f=(60,180,30,150,20,50)
width = 0.4
axes.bar(index,data_m,width,color='c',label='men',align='center')
axes.bar(index,data_f,width,color='b',label='women',align='edge')
axes.set_xticks(index+width/2)
axes.set_xticks(index+width/2)
axes.set_xticklabels(('Taxi','Metro','Walk','Bus','Bicycle','Driving'))
axes.legend()
plt.show()

在这里插入图片描述

# 水平柱状图
fig,axes = plt.subplots()
data_m=(40,120,20,100,30,200)
data_f=(60,180,30,150,20,50)
width = 0.4
axes.barh(index,data_m,width,color='c',label='men',align='center',alpha=0.4)
axes.barh(index,data_f,width,color='b',label='women',align='edge',alpha=0.4)
axes.set_yticks(index+width/2)
axes.set_yticklabels(('Taxi','Metro','Walk','Bus','Bicycle','Driving'))
axes.legend()
plt.show()

在这里插入图片描述

折线图

折线图可以看出数据的变化趋势

import matplotlib.pyplot as plt
import numpy as np
fig,axes = plt.subplots()
x = np.arange(10)
y1 = np.random.rand(10)
y2 = np.random.rand(10)
axes.plot(x,y1,'-o',color='c')
axes.plot(x,y2,'--o',color='b')
plt.show()

在这里插入图片描述

表格

通过表和图的结合,既可以直观的看到数据的分布情况,也能看到详细的数据

import matplotlib.pyplot as plt
import numpy as np
fig,axes = plt.subplots()
data_m=(40,120,20,100,30,200)
data_f=(60,180,30,150,20,50)
width = 0.4
index = np.arange(6)
axes.bar(index,data_m,width,color='c',label='men')
axes.bar(index,data_f,width,color='b',bottom=data_m,label='women')
axes.set_xticks([])
axes.legend()

# 表格
data=(data_m,data_f)
rows =('male','female')
columns = 'Taxi','Metro','Walk','Bus','Bicycle','Driving'
axes.table(cellText=data,rowLabels=rows,colLabels=columns)
plt.show()

在这里插入图片描述

不同坐标系下的图象

import matplotlib.pyplot as plt
import numpy as np
# 双扭线
fig,axes = plt.subplots()
theta_list = np.arange(0,2*np.pi,0.01)
r = [2*np.cos(2*theta) for theta in theta_list]
# polar 极坐标系
# 建立一个投影为极坐标的axes
axes = plt.subplot(projection='polar')
# 使用plot函数生成函数曲线,
axes.plot(theta_list,r)
# 为了美观删除r轴上所有的刻度
axes.set_rticks([])
plt.show()

在这里插入图片描述

matplotlib3D

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
axes = Axes3D(fig)
# 设置随机种子
np.random.seed(100)

x = np.random.rand(60)
y = np.random.rand(60)
z = np.random.rand(60)
axes.scatter(x,y,x)
plt.show()

在这里插入图片描述

# 使用pyplot实现
fig = plt.figure()
axes = plt.subplot(projection="3d")
x = np.random.rand(80)
y = np.random.rand(80)
z = np.random.rand(80)
axes.scatter(x,y,x)
plt.show()

猜你喜欢

转载自blog.csdn.net/qq_52007481/article/details/122538111