本文已参与「新人创造礼」活动,一同开启创造之路

基本布局对象

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()

数据分析----Matplotlib

数据分析----Matplotlib

散点图

能够将样本数据制作在二维平面上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()

数据分析----Matplotlib

数据分析----Matplotlib

饼图

饼图能够直观的显示某一类数据在悉数样本数据的百分比

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()

数据分析----Matplotlib

# 柱状图叠加效果,将两个柱状图叠加显示
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()

数据分析----Matplotlib

# 柱状图半堆叠
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()

数据分析----Matplotlib

# 水平柱状图
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()

数据分析----Matplotlib

折线图

折线图能够看出数据的变化趋势

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()

数据分析----Matplotlib

表格

通过表和图的结合,既能够直观的看到数据的散布状况,也能看到具体的数据

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()

数据分析----Matplotlib

不同坐标系下的图象

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()

数据分析----Matplotlib

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()

数据分析----Matplotlib

# 运用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()