机器学习——matplotlib

基础图表

1 曲线图和点状图

import numpy as np
import matplotlib.pyplot as plt# 基础图表
x = np.linspace(0, 10, 30)

# 这就是最普通的曲线图绘制
plt.plot(x, np.sin(x), '-o') # 基础二维图像(曲线图), (自变量, 因变量(函数), 形状)#plt.scatter(x, np.sin(x)) # 点状图


# 点状图 以及 颜色展示一组4维
rng = np.random.RandomState(0) # 通过numpy工具包生成模拟数据集,使用RamdomStaet获取随机数生成器# 这里的0表示随机数种子,只要随机数种子seed相同, 产生的随机数系列就相同。
x = rng.randn(100) # 1维矩阵,产生100个数 (返回数据服从正态分布)
y = rng.randn(100) 
colors = rng.rand(100) # 用法与randn一样(返回数据服从0~1均匀分布)
sizes = 1000 * rng.rand(100) # 

plt.scatter(x, y,             
 	 	 	c=colors, # 颜色
 	 	 	s=sizes, # 规模          
 	 	    alpha=0.3, # 不透明度           
 	 	    cmap="viridis") # 指定颜色映射,会使用不同的颜色来区分散点的值
 plt.colorbar() # 显示色阶 

机器学习——matplotlib_第1张图片

# matplotlib 的scatter函数(绘制散点图)
.scatter(
		x: 指定x轴数据
		y: 指定y轴数据
		s:指定散点的大小
		c:指定散点的颜色
		alpha:指定散点的透明度
		linewidths:指定散点边框线的宽度
		edgecolors:指定散点边框的颜色
		marker:指定散点的图形样式(支持的参数如下:表)
		cmap:指定散点的颜色映射,会适应不同的颜色来区分散点的值
		)
marker 支持的样式
. 点标记
, 像素标记
o 圆形标记
v 下三角形标记
^ 上三角形标记
1 向下三叉标记
2 向上三叉标记
3 向左三叉标记
4 向右三叉标记
s 正方形标记
p 五角星标记
* 星形标记
h 八边形标记
H 第二种八边形标记
+ 加号标记
x x标记
D 菱形标记
d 尖菱形标记
I 竖线标记
_ 横线标记

机器学习——matplotlib_第2张图片

2 误差图

#绘制一组误差为+_0.8的数据误差条图
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,50)
dy = 0.8
y = np.sin(x)+dy*np.random.randn(50)
plt.errorbar(x,y,yerr=dy, fmt='.k')

机器学习——matplotlib_第3张图片

plt.errorbar(
		x, # x坐标数据
		y, # y坐标数据
		yerr, # 定位y轴误差棒的大小,可以是一个数,也可以是二维数组(平均值与最小值的差,最大值与平均值的差)
		xerr, # 定义x轴误差棒的大小,可以是一个数,也可以二维数组
		fmt, # 定义 数据折线和数据点的样式
		ecolor, # 定义误差棒的颜色
		elinewidth, # 定义误差棒线的宽度
		capsize, # 定义误差棒帽的大小(长度)
		capthick, # 定义误差棒帽的宽度
		alpha, # 设置透明度(范围:0-1)
		marker, # 设置数据点的样式(参考上面的表)
		markersize(简写ms), #定义数据点的大小
		markeredgecolor(简写mec), # 定义数据点的边的颜色,可以是缩写字母颜色,或者十六进制#aaaaaa格式的颜色
		markeredgewidth(简写mew), # 定义数据点的边的宽度
		markerfacecolor(简写mfc), # 定义数据点的颜色
		linestyle, # 设置折线样式,设置成none,可影藏折线
		label, # 添加图例  
		)

3 柱状图(直方图)

import numpy as np
import matplotlib.pyplot as plt
x= [1,2,3,4,5,6,7,8]
y = [3,1,4,5,8,9,7,2]
label = ['A','B','C','D','E','F','G','H']
plt.bar(x,y,tick_label = label) # 竖着的柱状图#(图1)

plt.barh(x, y, tick_label = label) # 横着的柱状图(图2)

# 绘制1000个随机值得直方图#(图3)
data = np.random.randn(1000)#
plt.hist(data)

# 设置直方图分30个bins,并设置为频率分布(图4)
plt.hist(data, bins=30, histtype='stepfilled', density=True)
plt.show()

# 一张图中绘制多个图像,(如图5)
x1 = np.random.normal(0,0.8,1000)# 一张图绘制三组不同的直方图
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)
kwags = dict(alpha=0.3, bins=40,density = True) # 参数字典
plt.hist(x1, **kwags)
plt.hist(x2, **kwags)
plt.hist(x3, **kwags)

机器学习——matplotlib_第4张图片
机器学习——matplotlib_第5张图片
机器学习——matplotlib_第6张图片
机器学习——matplotlib_第7张图片
机器学习——matplotlib_第8张图片

4 自定义曲线图像

# 自定义图标图像
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,100) 
plt.plot(x,np.sin(x), '--', label='sin(x)') # label 便签示例

plt.xlabel('variable x') # 坐标轴标识
plt.ylabel('value y') # 坐标轴标识
plt.title('sin function') # 图标名字
plt.grid() # 显示网格
plt.axhline(y=0.8, ls = '--',c='r') # 绘制水平参考线
# 绘制参考区间
plt.axvspan(xmin=4, xmax=6, facecolor='r',alpha=0.3) #垂直于x轴
plt.axhspan(ymin=-0.2, ymax=0.2, facecolor='r',alpha=0.3) #垂直于y轴
# 添加注释文字(曲线上标注)
plt.text(3.2, 0, 'sin(x)', weight='bold', color='r')

#用剪头标出第一个顶峰
plt.annotate('maxinum', xy=(np.pi/2, 1), xytext=(np.pi/2+1, 1),
          	 weight='bold',             
          	 color='r',             
          	 arrowprops=dict(
          	 			arrowstyle='->',
          	 			connectionstyle='arc3',color='r'))


plt.ylim(-1.5, 1.5) # 限制y轴的范围
plt.show()

机器学习——matplotlib_第9张图片

5 自定义图例

# 自定义图例方位与方式
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,1000)
flg, ax = plt.subplots() # 多对象
ax.plot(x, np.sin(x), label='sin') # plot1
ax.plot(x, np.cos(x), '--',label='cos') # plot2
ax.legend() # 显示图例(默认右上角,有边框)
ax.legend(loc='upper left', frameon=False) # 图例在左上角显示,且不要边框
ax.legend(frameon=False, loc='lower center', ncol=2) #图例在下方居中部,且分成2部分显示,不显示边框(如下图)
plt.show()

机器学习——matplotlib_第10张图片

#多条曲线只显示前几个图例
import numpy as np
import matplotlib.pyplot as plt
# 法1 ,多条线,只显示前两个的图例
#y = np.sin(x[:,np.newaxis]+np.pi*np.arange(0,2,0.5))
#lines = plt.plot(x, y)#plt.legend(lines[:2], ['first','second']);
# lines 是plt.Line2D 类型的实例的列表
# 法2
plt.plot(x, y[:,0], label='first')
plt.plot(x, y[:,1], label='second')
plt.plot(x, y[:,2],)
plt.legend(framealpha=1, frameon=True)

机器学习——matplotlib_第11张图片

# 将图例分为不同的区域展示
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
lines = []
styles = ['-','--', '-.', ':']
x = np.linspace(0, 10, 1000)
for i in range(4):    
	lines += ax.plot(x, np.sin(x-i*np.pi/2), styles[i], color='black')
ax.axis('equal')
# 设置第一组标签
ax.legend(lines[:2], ['line A', 'line B'],loc='upper right', frameon=False)
# 设置第二组标签
from matplotlib.legend import Legend
leg = Legend(ax, lines[:2], ['line C', 'line D'], loc='lower right', frameon=False)
ax.add_artist(leg)

机器学习——matplotlib_第12张图片

6 多子图

# 多子图
import numpy as np
import matplotlib.pyplot as plt
# 在一个1.0 1.0的画布中, (0.65, 0.65)的位置创建一个0.20.2的子图
ax1 = plt.axes()
ax2 = plt.axes([0.65, 0.65, 0.2, 0.2])

机器学习——matplotlib_第13张图片

## 在2个子图中,显示sinx和cosx的图像
fig = plt.figure()
ax1 = fig.add_axes([0.1,0.5, 0.8, 0.4],ylim=(-1.2, 1.2))
ax2 = fig.add_axes([0.1,0.1, 0.8, 0.4], ylim=(-1.2, 1.2))

x = np.linspace(0,10)
ax1.plot(x, np.sin(x))
ax2.plot(x, np.cos(x))

机器学习——matplotlib_第14张图片

# for 循环创建6个子图,并且在图中标识出对应的子图坐标
import numpy as np
import matplotlib.pyplot as plt
# 方法1(单独xy轴)(图1)
#for i in range(1,7):
#    plt.subplot(2,3,i)
#    plt.text(0.5, 0.5, str((2,3,i)),fontsize=18, ha='center')

# 方法2(单独xy轴)(图1)
# fig = plt.figure()
# fig.subplots_adjust(hspace=0.4, wspace=0.4)
# for i in range(1,7):
#     ax = fig.add_subplot(2,3,i)
#     ax.text(0.5,0.5,str((2,3,i)),fontsize=18,ha='center')

# 法3:设置相同行和列共享x,y轴(图2)
fig, ax = plt.subplots(2,3,sharex='col',sharey='row')

机器学习——matplotlib_第15张图片
机器学习——matplotlib_第16张图片

你可能感兴趣的:(机器学习,python)