matplotlib.pyplot可视化
import matplotlib.pyplot as plt
1.散点图plt.scatter
:离散数据可视化
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs)
x,y:是输入数据,两个都是shape=(n,)的数组。
s:数据点大小,是一个实数或者是一个数组shape=(n,),默认20。
c:表示的是颜色。默认是蓝色’b’。
marker:表示的是标记的样式,默认的是’o’。可选样式见最后
cmap:Colormap实体或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用。如果没有申明就是image.cmap
norm:亮度设置,0-1之间,只有c是一个浮点数的数组的时候才使用。如果没有申明,就是默认为colors.Normalize。
vmin,实数,用来进行亮度数据的归一化。当norm存在的时候忽略。
alpha:实数,透明度。0-1之间。
linewidths:标记点的长度。
plt.scatter(X, Y, s=20, c='r', marker='v')
plt.show()
2.曲线图plt.plot
plt.plot(x, y, format_string, **kwargs)
x ,y:输入数据,列表或数组
format_string:控制曲线的格式字符串,由颜色字符、风格字符、标记字符组成,可选样式见下。
**kwargs 第二组或更多(x,y,format_string),可画多条曲线
plt.plot()可以将离散的点连成线
X = [1,2,3,4,5]
Y = [2,3,7,5,2]
plt.plot(X, Y, 'g.-')
plt.show()
可以画多条线。定义标记样式之后如果不定义曲线风格就会变成散点图,比如中间这条……
b = np.arange(5)
plt.plot(b, b*2,
b, b*1, 'x',
b, b*0.5, '.-')
plt.show()
样式参数也可以单独定义:
color : 控制线条颜色,
linestyle : 线条风格,
marker : 标记风格,
markerfacecolor: 标记颜色,
markersize: 标记尺寸。
b = np.arange(5)
plt.plot(b, b*1.5, linestyle='--')
plt.plot(b, b*0.5, c='b', marker='*', markerfacecolor='r', markersize=20)
plt.show()
3.标题plt.titile
plt.title()
fontsize:设置字体大小,默认12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]
fontweight:设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]
fontstyle:设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜
verticalalignment:设置水平对齐方式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ , ‘baseline’
horizontalalignment:设置垂直对齐方式,可选参数:left,right,center
rotation:(旋转角度)可选参数为:vertical,horizontal 。也可以为数字
alpha:透明度,参数值0至1之间
backgroundcolor:标题背景颜色
bbox:给标题增加外框 ,常用参数如下:
plt.title('',bbox=dict())
boxstyle:方框外形
facecolor(简写fc):背景颜色,之前设置的背景颜色会失效
edgecolor(简写ec):边框线条颜色
edgewidth:边框线条大小
4.图例plt.legend
plt.legend(*args, **kwargs)
keyword: Description
loc:图例的位置。
可选 ‘best’, ‘upper right’, ‘upper left’,‘lower left’, ‘lower right’, ‘right’, ‘center left’, ‘center right’, ‘lower center’, ‘upper center’, ‘center’。
也可以用(x,y)设定。x,y不是实际坐标值,是把坐标看成(1,1)后距离左下角的比例。例如(0.5,0.5)在中间。
plt.legend(loc='upper center')
prop :字体参数。
fontsize :字体大小。可选 int ,float ,‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’
markerscale :图例标记与原始标记的相对大小
markerfirst :如果为True,则图例标记位于图例标签的左侧
numpoints :为线条图图例条目创建的标记点数
scatterpoints :为散点图图例条目创建的标记点数
scatteryoffsets :为散点图图例条目创建的标记的垂直偏移量
frameon :是否绘制图例边框
plt.legend(loc='best',frameon=False) #去掉图例边框
fancybox :控制是否应在构成图例背景的FancyBboxPatch周围启用圆边
shadow : 控制是否在图例后面画一个阴
framealpha: 控制图例框架的 Alpha 透明度
edgecolor:图例边框颜色.
facecolor :图例背景颜色.
ncol :设置图例分为n列展示
borderpad : 图例边框的内边距
labelspacing:图例条目之间的垂直间距
handlelength: 图例句柄的长度
handleheight: 图例句柄的高度
handletextpad:图例句柄和文本之间的间距
borderaxespad :轴与图例边框之间的距离
columnspacing :列间距
title :设置图例标题
bbox_to_anchor :指定图例在轴的位置 bbox_transform:the transform for the bbox. transAxes if None.
可以按顺序给图例命名:
plt.plot(b, b * 3.0, '--')
plt.plot(b, b * 2.0, '-' )
plt.plot(b, b * 1.5, ':')
plt.plot(b, b * 1.0, '-.')
plt.plot(b, b * 0.5, '')
plt.legend([u'破折线',u'实线',u'虚线',u'点划线',u'无'])
plt.show()
也可以给plt.plot()中加入label参数:
plt.plot([1, 3, 5], [2, 4, 6], label=u'中文图例')
另一种使用方式:
# 另一种图例命名方式 例1
p1, = plt.plot(b, b)
p2, = plt.plot(b, b * 1.5)
plt.legend([p1, p2], ['line1', 'line2'])
plt.show()
中文图例:
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] #SimHei是黑体的意思
plt.plot([1, 3, 5], [2, 4, 6], label=u'中文图例')
plt.legend()
plt.show()
5.坐标轴标签
plt.xlabel(xlabel,fontdict=None,labelpd=None,**kwargs)
keyword: Description
fontdict
labelpad
font2 = {'family': 'Times New Roman',
'weight': 'normal',
'size': 30,
}
plt.xlabel('x', font2)
plt.ylabel('y',size=30)
plt.show()
6.创建自定义图像 plt.figure()
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
显示图像的画布
num:图像编号或名称,数字为编号 ,字符串为名称
figsize:指定figure的宽和高,单位为英寸;
dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
facecolor:背景颜色
edgecolor:边框颜色
frameon:是否显示边框
7.创建单个子图 plt.subplot
subplot(nrows,ncols, index, **kwargs)
plt.subplot可以规划figure划分为n个子图
nrows, nclos, index:三个整数,描述子图的位置信息。分别是行数、列数、索引。所有的数字不能超过10。plt.subplot(2, 3, 5) 和 plt.subplot(235) 是一样的。
projection:子图的类型.默认线型图, ‘aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’,极点图 ‘polar’, ‘rectilinear’, str
plt.subplot(221)
plt.plot(b,b)
plt.title('1')
plt.subplot(222, projection='polar')
plt.plot(b, b*2)
plt.title('2')
plt.subplot(223)
plt.plot(b, b*1.5)
plt.xlabel('x')
plt.subplot(224)
plt.plot(b, b*0.5)
plt.show()
8.创建多个子图 plt.subplots
参数和plt.subplot类似
f, axes =plt.subplots(2,2)
ax1=axes[0,0]
ax1.plot(b,b)
ax1.grid() # 网格图
ax2 = axes[0, 1]
ax2.plot(b, b*1.5)
# 没有作图的子图会显示出来空子图
plt.show()
没有作图的子图会显示出来空子图
9.面向对象API:add_subplots
与add_axes
1.add_subplots
参数和subplots相似
# 新建figure对象
fig = plt.figure()
# 新建子图1
ax1 = fig.add_subplot(2, 2, 1)
ax1.plot(b, b)
# 新建子图3
ax3 = fig.add_subplot(2, 2, 3)
ax3.plot(b, b ** 2)
ax3.grid(color='r', linestyle='--', linewidth=1, alpha=0.3)
# 新建子图4
ax4 = fig.add_subplot(2, 2, 4)
ax4.plot(b, np.log(b))
plt.show()
没有作图的子图不会显示出来
2.add_axes新增子区域
可以用来做图中图。。。
# 新建figure
fig = plt.figure()
# 定义数据
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 3, 4, 2, 5, 8, 6]
# figure的百分比,从figure 10%的位置开始绘制, 宽高是figure的80%
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
# 新增区域ax1,获得绘制的句柄
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(x, y, 'r')
ax1.set_title('area1')
# 新增区域ax2,嵌套在ax1内
left, bottom, width, height = 0.2, 0.6, 0.25, 0.25
# 获得绘制的句柄
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(x, y, 'b')
ax2.set_title('area2')
plt.show()
10.保存图片plt.savefig()
import time
time = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))
fname = 'loss' + time + '.png'
plt.savefig(fname)
颜色c可选:
红色: ‘r’
蓝色:‘b’
绿色:‘g’
黄色:‘y’
magenta洋红色: ‘m’
黑:‘k’
白色:'w’看不到?因为这是白色hhh……选中这行试试
cyan青绿色: ‘c’
以下的代码参考:https://www.cnblogs.com/lfri/p/12248629.html
# Fixing random state for reproducibility
np.random.seed(19680801)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2 # 0 to 15 point radii
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
标记marker可选样式:
“^”三角
“.”点
“,”像素点
“o”圆
“v”倒三角
“<”左三角
“>”右三角。略
“1”
“2”。略
“3”
“4”。略
“8”八角形
“s”正方形
“p”五角
“h”六角1。略
“H”六角2。略
“*”星星
“+”加号。略
“x” x号。略
“D”钻石
“d”细钻
“|”
“_”。略
曲线风格可选样式:
‘‐’ 实线
‘‐‐’ 破折线
‘‐.’ 点划线
‘:’ 虚线
’ ’ 无线条
plt.plot(b, b * 3.0, '--', label=u'破折线')
plt.plot(b, b * 2.0, '-', label=u'实线', )
plt.plot(b, b * 1.5, ':', label=u'虚线', )
plt.plot(b, b * 1.0, '-.', label=u'点划线')
plt.plot(b, b * 0.5, '', label=u'无')
plt.legend()
plt.show()