-
Python Matplotlib绘图
2020-08-12 11:25:18Matplotlib安装 cmd输入:pip install Matplotlib 点我进入Matplotlib官网 图片(fig)与子图(ax) 需要导入:form matplotlib ...设置图片宽度和高度 dpi 图片透明度 plt.subplot(x,y,index)创建子图 plt.sub..- Matplotlib安装
cmd输入:pip install Matplotlib
点我进入Matplotlib官网
- 画布(fig)与子图(ax)
需要导入:form matplotlib import pyplt as plt
plt.figure(figsize,dpi)
创建画布plt.figure(属性) figsize = (widtht,hight) 设置画布宽度和高度 dpi 画布透明度 plt.subplot(x y index)
创建子图plt.subplot(属性) x 行数 y 列数 index 索引(从1开始,从左往右,从上往下) plt.subplots(nrows, ncols, sharex = False, sharey = False)
创建画布和子图
返回值:fig,axplt.subplots(属性) nrows 子图的行数 ncols 子图的列数 sharex 所有子图使用相同的x轴刻度 sharey 所有子图使用相同的y轴刻度 通用方法 plt.figure(figsize=None,dpi=None) 生成新的画布,figsize:画布大小(传参:元组),dpi:透明度 plt.savefig(fname) 保存图片,fname:保存图片位置 plt.xticks(ticks=None,lables=None) ticks:设置x轴刻度的值,labels:刻度标签 plt.yticks(ticks=None,lables=None) ticks:设置y轴刻度的值,labels:刻度标签 plt.xlabel(xlabel) 设置x轴标签 plt.ylabel(ylabel) 设置y轴标签 plt.title() 设置图标题 plt.grid() 根据x轴和y轴的数值展示轴网格 plt.legend(prop) 显示图例标签,prop:局部字体设置 plt.annotate(text,xy,xytext,arrowprops = {}) 数据标签,text:文本标签,xy:标点位置(元组),xytext:文本位置(元组),arrowprops:箭头设置 plt.show() 释放空间,并显示已绘制的图 plt.subplots_adjust(wspace,hspace) 调整子图之间的间距,wspace(左右间距),hspace(上下间距)
zip() 函数
作用:用于生成坐标
zip(x,y)
生成坐标(x,y必须数量一致)zip(属性) x x轴上的位置 y y轴上的位置
- 中文显示问题
解决方法:
方法一:
import matplotlib font = { 'family':'SimHei', 'weight':'bold', 'size':12 } matplotlib.rc("font", **font)
方法二:
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体) plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
方法三:
from matplotlib import pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) x = [1,2,3,4] y = [3,2,1,3] plt.plot(x,y) plt.xlabel("x轴标签",fontproperties=font) plt.show()
- 折线图
折线图以折线的上升或下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况
折线图可以通过plt.plot()函数来绘制
plt.plot(x,y,color,linestyle,marker,label)
构件折线图
(x,y元素必须一致)plt.plot(属性) x 在x轴上的点 y 在y轴上的点 color 设置线的颜色 linestyle 设置线的样式 marker 标记样式 label 图例标签 - 散点图
散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式
特点:判断变量之间是否存在数量关联趋势,表示离群点(分布规律)
散点图通过plt.scatter() 函数
plt.scatter(x,y)
来构件散点图plt.scatter(属性) x 在x轴上的点 y 在y轴上的点 - 柱状图及条形图
条形图是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图。
特点:1.能够使人们一眼看出各个数据的大小。
2.易于比较数据之间的差别。
通过 plt.bar() 方法绘制柱状图, plt.barh() 方法绘制条形图
plt.bar(x,height,width = 0.8,bottom,align = "center")
构建 柱状图plt.bar(属性) x 在x轴上的位置 height 在y轴上的高度 width = 0.8 柱子的宽度 bottom = “None” 柱子底部的起始位置 align = “center” 校准位置 plt.barh(y,width,height = 0.8,align = "center")
构建 条形图bar.barh(属性) y 在x轴上的长度 width 在y轴上的位置 height 柱子的宽度 align = “center” 校准位置 - 直方图
直方图由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据范围,纵轴表示分布情况
特点:绘制连续性的数据,展示一组或者多组数据的分布情况(统计)
通过 plt.hist() 方法绘制
plt.hist(x,bins = None,density =False)
构建图形plt.hist(属性) x 在x轴上的位置 bins = None 组数(默认为10) density = False 频率(默认为频数) - 扇形图
扇形图,用整个圆表示总数,用圆内各个扇形的大小表示各部分数量占总数的百分数。
通过 plt.pie() 方法绘制
plt.pie(x, explode=None, labels=None,autopct=None,shadow=False)
构建图形plt.pie(属性) x 扇形数据 explode = None 设置某几个分块是否要分离饼图 labels = None 每块扇形标签 autopct = None 百分比数据标签 shadow = False 是否显示阴影 plt.pie返回值 patchs 绘制饼图每块对象 texts 文本列表 autotexts 百分比的文本列表 - 箱型图
箱线图是一种直观简洁的方式去呈现一组数据的分布。 箱线图广泛用于各个数据分析领域,它能非常简单明了地显示一组数据中5个重要数值,并且还能发现一组数据中的存在的异常值。
五个重要数值 最大值 最小值 中位数 下四分位数 上四分位数 通过 plt.boxplot() 方法绘制
ply.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,labels=None,meanline=None,showmeans=None)
构建图形plt.boxplot(属性) x 需要绘制的箱型图的数据 notch = None 是否展示置信区间 默认为False sym = None 代表异常点的符号表示 默认为圆点 vert = None 是否是垂直的 默认是True whis = None 上下限系数 默认为1.5 positions = None 设置每个盒子的位置 widths = None 设置每个盒子的宽度 labels = None 每个盒子的label meanline和showmean 都为True的时候 会展示平均线 - 雷达图
雷达图(Radar Chart)又被叫做蜘蛛网图,适用于显示三个或更多的维度的变量的强弱情况。比如某个企业在哪些业务方面的投入等,都可以用雷达图方便的表示。
用过 plt.polar() 来绘制
plt.polar(theta,r)
来构建图形plt.polar theta 分割区块 r 数据 (区块和数据个数必须相等)
- Axes (子画)
Axes容器是用来创建具体的图形的。比如画曲线,柱状图,都是画在上面。所以之前我们学的使用plt.xx绘制各种图形(比如条形图,直方图,散点图等)都是对Axes的封装
方法 axes.set_xlim(min,max) 限制x轴的范围 axes.set_ylim(min,max) 限制y轴的范围 axes.text(x,y,text) 在坐标位置标注文本 axes.set_xlabel(text) 设置x轴文本标签 axes.set_ylabel(text) 设置y轴文本标签 axes.twinx() 共享x轴 axes.twiny() 共享y轴 axes.minorticks_on() 显示x与y轴的子刻度 - Axis(轴)
Axis代表的是x轴或者y轴的对象。包含Tick(刻度)对象,TickLabel刻度文本对象,以及AxisLabel坐标轴文本对象。axis对象有一些方法可以操作刻度和文本等。
axis: xaxis,yaxis
方法 axes.axis.set_label_coords(x,y) 设置x或y轴的文本标签位置 自定义刻度格式
from matplotlib import ticker formatter = ticker.FormatStrFormatter("自定义格式") ax1.yaxis.set_major_formatter(formatter)
- 多图布局
调整子图间距
fig.tight_layout(h_pad=None,v_pad=None)
(不传参,默认自动调整)fig.tight_layout(属性) h_pad 上下间距 v_pad 左右间距 自定义布局
方法一:from matplotlib import pyplot as plt plt.figure() plt.subplot(221) plt.subplot(223) plt.subplot(122)
方法二:
fig.add_gridspec(nrows=1, ncols=1,width_ratios,height_ratios)
创建栅栏模式fig.add_gridspec(属性) nrows 行 nclos 列 width_ratios 宽的比值 height_ratios 高的比值 from matplotlib import pyplot as plt fig = plt.figure() gs = fig.add_gridspec(2,2) fig.add_subplot(gs[0,:]) fig.add_subplot(gs[1,0]) fig.add_subplot(gs[1,1])
- Matplotlib安装
-
10.1 Matplotlib
2020-06-23 09:44:08文章目录Matplotlib基本使用...scatter柱状图 bar生成基本图形加颜色和数据contours 等高线图画等高线添加高度数字Image图片随机矩阵画图出图方式colorbar3D plot3D 图投影多图合并显示subplot 多合一显示(个人喜欢.Matplotlib
基本使用
基本用法
# 使用import导入模块matplotlib.pyplot,并简写成plt import matplotlib.pyplot as plt # 使用np.linspace定义x:范围是(-1,1);个数是50. 仿真一维数据组(x ,y)表示曲线1 x = np.linspace(-1, 1, 50) y = 2*x + 1 # 使用plt.figure定义一个图像窗口. 使用plt.plot画(x ,y)曲线. 使用plt.show显示图像 plt.figure() plt.plot(x, y) plt.show()
figure图像
- matplotlib 的 figure 就是一个 单独的 figure 小窗口, 小窗口里面还可以有更多的小图片 x = np.linspace(-3, 3, 50) y1 = 2*x + 1 y2 = x**2 # 使用plt.figure()定义一个图像窗口. 使用plt.plot()画(x ,y1)曲线 plt.figure() plt.plot(x, y1) plt.show() # 使用plt.figure定义一个图像窗口:编号为3;大小为(8, 5) # 使用plt.plot画(x ,y2)曲线 # 使用plt.plot画(x ,y1)曲线,曲线的颜色属性(color)为红色;曲线的宽度(linewidth)为1.0 曲线的类型(linestyle)为虚线 # 使用plt.show()显示图像 plt.figure(num=3, figsize=(8, 5)) plt.plot(x, y2) plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--') plt.show()
设置坐标轴
调整名字和间隔
- 学习在 matplotlib 中如何设置坐标轴的范围, 单位长度, 替代文字等等 x = np.linspace(-3, 3, 50) y1 = 2*x + 1 y2 = x**2 plt.figure() plt.plot(x, y2) plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--') # 使用plt.xlim设置x坐标轴范围:(-1, 2) # 使用plt.ylim设置y坐标轴范围:(-2, 3) # 使用plt.xlabel设置x坐标轴名称:’I am x’ # 使用plt.ylabel设置y坐标轴名称:’I am y’ plt.xlim((-1, 2)) plt.ylim((-2, 3)) plt.xlabel('I am x') plt.ylabel('I am y') plt.show() # 使用np.linspace定义范围以及个数:范围是(-1,2);个数是5. # 使用plt.xticks设置x轴刻度:范围是(-1,2);个数是5 new_ticks = np.linspace(-1, 2, 5) plt.xticks(new_ticks) # 使用plt.yticks设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3] # 对应刻度的名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’] 其中,在字符前后加上$, 且在字符前加上r, 以保证字符能够被正确显示,空格前要加转义符\,以保证显示空格 如要显示希腊字母,比如阿尔法:\alpha \beta 在字母右下加角标: \alpha_i # 使用plt.show显示图像 plt.yticks([-2, -1.8, -1, 1.22, 3], # 坐标和名称要一一对应 [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$']) plt.show()
设置坐标轴边框 .gca()
- 如何移动matplotlib 中 axis 坐标轴的位置 x = np.linspace(-3, 3, 50) y1 = 2*x + 1 y2 = x**2 plt.figure() plt.plot(x, y2) plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--') plt.xlim((-1, 2)) plt.ylim((-2, 3)) new_ticks = np.linspace(-1, 2, 5) plt.xticks(new_ticks) plt.yticks([-2, -1.8, -1, 1.22, 3],['$really\ bad$', '$bad$', '$normal$', '$good$', '$really\ good$']) # 使用plt.gca获取当前坐标轴信息 (gca: get current axis) # 使用 .spines 设置边框: 右侧边框left;使用.set_color设置边框颜色:默认白色 上边框top;使用.set_color设置边框颜色:默认白色; 另外,右边框right,下边框bottom ax = plt.gca() ax.spines['right'].set_color('None') # none也可以 ax.spines['top'].set_color('None') plt.show()
调整坐标轴
# 使用 .xaxis.set_ticks_position设置x坐标刻度数字或名称的位置:bottom (所有位置:top,bottom,both,default,none) ax.xaxis.set_ticks_position('bottom') # 使用.spines设置边框:x轴; # 使用.set_position设置边框位置:y=0的位置 (位置所有属性:outward,axes,data) ---> 此处我不明白outward和axes,只明白data ax.spines['bottom'].set_position(('data', 0)) ---> 此处是元组 plt.show() # 使用.yaxis.set_ticks_position设置y坐标刻度数字或名称的位置:left. 所有位置:left,right,both,default,none) ax.yaxis.set_ticks_position('left') # 使用.spines设置边框:y轴 # 使用.set_position设置边框位置:x=0的位置; (位置所有属性:outward,axes,data) ax.spines['left'].set_position(('data',0)) plt.show()
legend 图例
添加图例
- matplotlib 中的 legend 图例就是为了帮我们展示出每个数据对应的图像名称,更好的让读者认识到你的数据结构 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y1 = 2*x + 1 y2 = x**2 plt.figure() #set x limits plt.xlim((-1, 2)) plt.ylim((-2, 3)) # set new sticks new_sticks = np.linspace(-1, 2, 5) plt.xticks(new_sticks) # set tick labels plt.yticks([-2, -1.8, -1, 1.22, 3], [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$']) # 我们将对图中的两条线绘制图例,首先我们设置两条线的类型等信息(蓝色实线与红色虚线) # set line syles l1, = plt.plot(x, y1, label='linear line') l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line') # legend将要显示的信息来自于上面代码中的label. # 所以我们只需要简单写下一下代码, plt 就能自动的为我们添加图例 plt.legend(loc='upper right') # 参数 loc='upper right' 表示图例将添加在图中的右上角
调整位置和名称
# 如果我们想单独修改之前的 label 信息, 给不同类型的线条设置图例信息. 我们可以在 plt.legend输入更多参数 # 如果以下面这种形式添加 legend, 我们需要确保在上面的代码 plt.plot(x,y2,label='linear line')和plt.plot(x,y1,label='square line')中有用变量l1和l2分别存储起来 # 需要注意的是 l1, l2,要<以逗号结尾>, 因为plt.plot()返回的是一个列表. l1, = plt.plot(x,y2,label=['linear line']) # 逗号必须有 l2, = plt.plot(x,y1,label=['square line']) # 逗号必须有 plt.legend(handles=[l1, l2], labels=['up', 'down'], loc='best') # 这样我们就能分别重新设置线条对应的 label 了. # 其中’loc’参数有多种,’best’表示自动分配最佳位置,其余的如下: 'best' : 0, 'upper right' : 1, 'upper left' : 2, 'lower left' : 3, 'lower right' : 4, 'right' : 5, 'center left' : 6, 'center right' : 7, 'lower center' : 8, 'upper center' : 9, 'center' : 10
Annotation 标注
mport matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y = 2*x + 1 plt.figure(num=1, figsize=(8, 5),) plt.plot(x, y,) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0)) # 然后标注出点(x0, y0)的位置信息 # 用plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=2.5) 画出一条垂直于x轴的虚线. x0 = 1 y0 = 2*x0 + 1 plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=2.5) # set dot styles plt.scatter([x0, ], [y0, ], s=50, color='b')
添加注释 annotate
# 接下来我们就对(x0, y0)这个点进行标注 plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2")) 其中参数xycoords='data' 是说基于数据的值来选位置, xytext=(+30, -30) 和 textcoords='offset points' 对于标注位置的描述 和 xy 偏差值, arrowprops是对图中箭头类型的一些设置
添加注释 text
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text. \mu\ \sigma_i\ \alpha_t$', fontdict={'size': 16, 'color': 'r'}) 其中-3.7, 3,是选取text的位置, 空格需要用到转字符\ ,fontdict设置文本字体
tick 能见度(曲线透明度)
当图片中的内容较多,相互遮盖时,我们可以通过设置相关内容的透明度来使图片更易于观察, 也即是通过本节中的bbox参数设置来调节图像信息 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y = 0.1*x plt.figure() # 在 plt 2.0.2 或更高的版本中, 设置 zorder(渲染顺序) 给 plot 在 z 轴方向排序 plt.plot(x, y, linewidth=10, zorder=1) # zorder=1, 相当于第一图层 plt.ylim(-2, 2) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0)) # 然后对被遮挡的图像调节相关透明度,本例中设置 x轴 和 y轴 的刻度数字进行 不透明度alpha 设置 for label in ax.get_xticklabels() + ax.get_yticklabels(): label.set_fontsize(12) # 在 plt 2.0.2 或更高的版本中, 设置 zorder 给 plot 在 z 轴方向排序 label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.7, zorder=2)) plt.show() 其中label.set_fontsize(12)重新调节字体大小 bbox设置目的内容的透明度相关参数: facecolor调节 box 前景色 edgecolor 设置边框,本处设置边框为无 alpha设置 不透明度
保存图像
plt.savefig('路径') 也可以保存在当下路径,并命名,如: plt.savefig('./figure1.png')
画图种类
散点图 scatter
首先,先引入matplotlib.pyplot简写作plt,再引入模块numpy用来产生一些随机数据。生成1024 个呈标准正态分布的二维数据组 (平均数是0,方差为1) 作为一个数据集,并图像化这个数 据集。每一个点的颜色值用T来表示: import matplotlib.pyplot as plt import numpy as np n = 1024 # data size X = np.random.normal(0, 1, n) # 每一个点的X值 Y = np.random.normal(0, 1, n) # 每一个点的Y值 T = np.arctan2(Y,X) # for color value # 输入X和Y作为location,size=75,颜色为T,color map用默认值,不透明度alpha 为 50% # 轴显示范围定位(-1.5,1.5),并用xtick()函数来隐藏x坐标轴,y轴同理: plt.scatter(X, Y, s=75, c=T, alpha=.5) plt.xlim(-1.5, 1.5) plt.xticks(()) # ignore xticks plt.ylim(-1.5, 1.5) plt.yticks(()) # ignore yticks plt.show()
柱状图 bar
向上向下分别生成12个数据,X为 0 到 11 的整数 ,Y是相应的均匀分布的随机数据。 使用的函数是plt.bar,参数为X和Y: import matplotlib.pyplot as plt import numpy as np
生成基本图形
n = 12 X = np.arange(n) Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n) Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n) plt.bar(X, +Y1) plt.bar(X, -Y2) plt.xlim(-.5, n) plt.xticks(()) plt.ylim(-1.25, 1.25) plt.yticks(()) plt.show()
加颜色和数据
# 下面我们就颜色和数值进行优化。 用facecolor设置主体颜色,edgecolor设置边框颜色为白色, plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white') plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white') # 接下来我们用函数plt.text分别在柱体上方(下方)加上数值,用%.2f保留两位小数,横向居 中对齐ha='center',纵向底部(顶部)对齐va='bottom': for x, y in zip(X, Y1): # ha: horizontal alignment(横向对齐) # va: vertical alignment(纵向对齐) plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom') for x, y in zip(X, Y2): # ha: horizontal alignment # va: vertical alignment plt.text(x + 0.4, -y - 0.05, '%.2f' % y, ha='center', va='top')
contours 等高线图
画等高线
数据集即三维点 (x,y) 和对应的高度值,共有256个点。高度值使用一个 height function f(x,y) 生成。 x, y 分别是在区间 [-3,3]中均匀分布的256个值,并用meshgrid在二维平面中将每一个x和每一个y分别对应起来,编织成栅格: import matplotlib.pyplot as plt import numpy as np def f(x,y): # the height function return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2) n = 256 x = np.linspace(-3, 3, n) y = np.linspace(-3, 3, n) X,Y = np.meshgrid(x, y) 接下来进行颜色填充。使用函数plt.contourf把颜色加进去,位置参数分别为:X, Y, f(X,Y) 不透明度0.75,并将 f(X,Y) 的值对应到color map的暖色组中寻找对应颜色 # use plt.contourf to filling contours # X, Y and value for (X,Y) point plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot) (把hot改为cool,就变为冷色调)
添加高度数字
其中,8代表等高线的密集程度,这里被分为10个部分。如果是0,则图像被一分为二。 最后加入Label,inline控制是否将Label画在线里面,字体大小为10。并将坐标轴隐藏: plt.clabel(C, inline=True, fontsize=10) plt.xticks(()) plt.yticks(())
Image图片
这一节我们讲解怎样在matplotlib中打印出图像。这里我们打印出的是纯粹的数字,而非自然图像。 我们今天用这样 3x3 的 2D-array 来表示点的颜色,每一个点就是一个pixel import matplotlib.pyplot as plt import numpy as np a = np.array([0.313660827978, 0.365348418405, 0.423733120134, 0.365348418405, 0.439599930621, 0.525083754405, 0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)
随机矩阵画图
# 三行三列的格子,a代表每一个值,图像右边有一个注释,白色代表值最大的地方,颜色越深值越小 plt.imshow(a, interpolation='nearest', cmap='bone', origin='lower') 我们之前选cmap的参数时用的是:cmap=plt.cmap.bone,而现在,我们可以直接用单引号传入参数 origin='lower'代表的就是选择的原点的位置。 interpolation='nearest' 代表的是出图方式
出图方式
官网可看到出图方式: https://matplotlib.org/examples/images_contours_and_fields/interpolation_methods.html 这里我们使用的是内插法中的 Nearest-neighbor 的方法 interpolation='nearest'
colorbar
下面我们添加一个colorbar ,其中我们添加一个shrink参数,使colorbar的长度变短为原来的92%: plt.colorbar(shrink=.92) plt.xticks(()) plt.yticks(()) plt.show()
3D plot
- 额外添加模块: from mpl_toolkits.mplot3d import Axes3D
3D 图
之后要先定义一个图像窗口,在窗口上添加3D坐标轴: fig = plt.figure() ax = Axes3D(fig) # 接下来给进 X 和 Y 值,并将 X 和 Y 编织成栅格。 每一个(X, Y)点对应的高度值我们用下面这个函数来计算 X = np.arange(-4, 4, 0.25) Y = np.arange(-4, 4, 0.25) X, Y = np.meshgrid(X, Y) # x-y 平面的网格 R = np.sqrt(X ** 2 + Y ** 2) # height value Z = np.sin(R) # 做出一个三维曲面,并将一个 colormap rainbow 填充颜色,之后将三维图像投影到 XY 平面上做一个等高线图。 # plot 3D 图像: ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow') 其中,rstride 和 cstride 分别代表 row 和 column 的跨度 cmap 代表的是颜色
投影
# 下面添加 XY 平面的等高线: ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow')) 其中,zdir='z'表示投影面的法线是z轴
多图合并显示
subplot 多合一显示(个人喜欢用)
均匀图中图
使用plt.subplot来创建小图. plt.subplot(2,2,1)表示将整个图像窗口分为2行2列, 当前位置为1. 使用plt.plot([0,1],[0,1])在第1个位置创建一个小图 plt.subplot(2,2,1) plt.plot([0,1],[0,1]) plt.subplot(2,3,4)表示将整个图像窗口分为2行3列, 当前位置为4. 使用plt.plot([0,1],[0,2])在第4个位置创建一个小图. plt.subplot(2,3,4) plt.plot([0,1],[0,2])
不均匀图中图
- 以上面的4个小图为例, 如果把第1个小图放到第一行, 而剩下的3个小图都放到第二行. # 使用plt.subplot(2,1,1)将整个图像窗口分为2行1列, 当前位置为1. 使用plt.plot([0,1],[0,1])在第1个位置创建一个小图 plt.subplot(2,1,1) plt.plot([0,1],[0,1]) # 使用plt.subplot(235)将整个图像窗口分为2行3列,当前位置为5. 使用plt.plot([0,1],[0,3])在第5个位置创建一个小图. 同上, 再创建plt.subplot(236). plt.subplot(235) plt.plot([0,1],[0,3]) plt.subplot(236) plt.plot([0,1],[0,4])
Subplot 分格显示
- 这里介绍三种方法
1、subplot2grid
import matplotlib.pyplot as plt plt.figure() # 使用plt.subplot2grid来创建第1个小图, (3,3)表示将整个图像窗口分成3行3列, (0,0)表示从第0 # 行第0列开始作图,colspan=3表示列的跨度为3, rowspan=1表示行的跨度为1. colspan和 # rowspan缺省, 默认跨度为1 ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3) ax1.plot([1, 2], [1, 2]) # 画小图 ax1.set_title('ax1_title') # 设置小图的标题 # 使用plt.subplot2grid来创建第2个小图, (3,3)表示将整个图像窗口分成3行3列, (1,0)表示从第1 # 行第0列开始作图,colspan=2表示列的跨度为2. 同上画出 ax3, (1,2)表示从第1行第2列开始 # 作图,rowspan=2表示行的跨度为2. 再画一个 ax4 和 ax5, 使用默认 colspan, rowspan. ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2) ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2) ax4 = plt.subplot2grid((3, 3), (2, 0)) ax5 = plt.subplot2grid((3, 3), (2, 1)) # 使用ax4.scatter创建一个散点图, 使用ax4.set_xlabel和ax4.set_ylabel来对x轴和y轴命名. ax4.scatter([1, 2], [2, 2]) ax4.set_xlabel('ax4_x') ax4.set_ylabel('ax4_y')
2、gridspec
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec # 使用plt.figure()创建一个图像窗口, 使用gridspec.GridSpec将整个图像窗口分成3行3列 plt.figure() gs = gridspec.GridSpec(3, 3) # 使用plt.subplot来作图, gs[0, :]表示这个图占第0行和所有列, gs[1, :2]表示这个图占第1行和第 # 2列前的所有列, gs[1:, 2]表示这个图占第1行后的所有行和第2列, gs[-1, 0]表示这个图占倒数 # 第1行和第0列, gs[-1, -2]表示这个图占倒数第1行和倒数第2列 ax6 = plt.subplot(gs[0, :]) ax7 = plt.subplot(gs[1, :2]) ax8 = plt.subplot(gs[1:, 2]) ax9 = plt.subplot(gs[-1, 0]) ax10 = plt.subplot(gs[-1, -2])
3、subplots
使用plt.subplots建立一个2行2列的图像窗口,sharex=True表示共享x轴坐标, sharey=True表示共享y轴坐标. ((ax11, ax12), (ax13, ax14))表示第1行从左至右依次放ax11和ax12, 第2行从左至右依次放ax13和ax14 f, ((ax11, ax12), (ax13, ax14)) = plt.subplots(2, 2, sharex=True, sharey=True) # 使用ax11.scatter创建一个散点图. ax11.scatter([1,2], [1,2]) # plt.tight_layout()表示紧凑显示图像, plt.show()表示显示图像. plt.tight_layout() plt.show()
图中图 plot in plot
- 两个小图title inside 1和title inside 2又出现在大图title中 # 导入pyplot模块 import matplotlib.pyplot as plt # 初始化figure fig = plt.figure() # 创建数据 x = [1, 2, 3, 4, 5, 6, 7] y = [1, 3, 4, 2, 5, 8, 6] ## 大图 # 接着,我们来绘制大图。首先确定大图左下角的位置以及宽高 left, bottom, width, height = 0.1, 0.1, 0.8, 0.8 # 注意,4个值都是占整个figure坐标系的百分比。在这里,假设figure的大小是10x10, 那么大图就被包含在由(1, 1)开始,宽8,高8的坐标系内。 # 将大图坐标系添加到figure中,颜色为r(red),取名为title: ax1 = fig.add_axes([left, bottom, width, height]) ax1.plot(x, y, 'r') ax1.set_xlabel('x') ax1.set_ylabel('y') ax1.set_title('title') ## 小图1 # 接着,我们来绘制左上角的小图,步骤和绘制大图一样,注意坐标系位置和大小的改变 left, bottom, width, height = 0.2, 0.6, 0.25, 0.25 ax2 = fig.add_axes([left, bottom, width, height]) ax2.plot(y, x, 'b') ax2.set_xlabel('x') ax2.set_ylabel('y') ax2.set_title('title inside 1') ## 小图2 # 最后,我们来绘制右下角的小图。这里我们采用一种更简单方法,即直接往plt里添加新的坐标系: plt.axes([0.6, 0.2, 0.25, 0.25]) plt.plot(y[::-1], x, 'g') # 注意对y进行了逆序处理 plt.xlabel('x') plt.ylabel('y') plt.title('title inside 2') plt.show()
次坐标轴
- 有时候我们会用到次坐标轴,即在同个图上有第2个y轴存在。同样可以用matplotlib做到,而且很简单 import matplotlib.pyplot as plt import numpy as np ## 第一个y坐标 x = np.arange(0, 10, 0.1) y1 = 0.05 * x**2 y2 = -1 * y1 # 可以看到,y2和y1是互相倒置的。接着,获取figure默认的坐标系 ax1 fig, ax1 = plt.subplots() ## 第二个y坐标 # 对ax1调用twinx()方法,生成如同镜面效果后的ax2: ax2 = ax1.twinx() # 接着进行绘图, 将 y1, y2 分别画在 ax1, ax2上: ax1.plot(x, y1, 'g-') # green, solid line ax1.set_xlabel('X data') ax1.set_ylabel('Y1 data', color='g') ax2.plot(x, y2, 'b-') # blue ax2.set_ylabel('Y2 data', color='b')
Animation 动画
- 使用matplotlib做动画也是可以的,我们使用其中一种方式,function animation来说说 from matplotlib import pyplot as plt from matplotlib import animation import numpy as np fig, ax = plt.subplots() # 我们的数据是一个0~2π内的正弦曲线: x = np.arange(0, 2*np.pi, 0.01) line, = ax.plot(x, np.sin(x)) # 接着,构造自定义动画函数animate,用来更新每一帧上各个x对应的y坐标值,参数表示第i帧: def animate(i): line.set_ydata(np.sin(x + i/10.0)) return line, # 然后,构造开始帧函数init: def init(): line.set_ydata(np.sin(x)) return line, ## 参数设置 接下来,我们调用FuncAnimation函数生成动画。参数说明: fig 进行动画绘制的figure func 自定义动画函数,即传入刚定义的函数animate frames 动画长度,一次循环包含的帧数 init_func 自定义开始帧,即传入刚定义的函数init interval 更新频率,以ms计 blit 选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示动画 ani = animation.FuncAnimation(fig=fig, func=animate, frames=100, init_func=init, interval=20, blit=False) plt.show() # 当然,你也可以将动画以mp4格式保存下来,但首先要保证你已经安装了ffmpeg 或者mencoder ani.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])
-
七、Matplotlib——Contours等高线图、Image图片
2019-09-28 19:04:38一、Contours等高线图 import pandas as pd ...import matplotlib.pyplot as plt #计算高度的公式 def compute_hight(x, y): return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 - y**2) n = 256 x = np.li...一、Contours等高线图
import pandas as pd import numpy as np import matplotlib.pyplot as plt #计算高度的公式 def compute_hight(x, y): return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 - y**2) n = 256 x = np.linspace(-3, 3, n) y = np.linspace(-3, 3, n) # 将 x 有 合并成网格 X,Y = np.meshgrid(x, y) # # 8 表示将等高线图十份,0 为两份 # cmap代表为color map,我们把color map映射成hot(热力图) hot cool plt.contourf(X, Y, compute_hight(X, Y), 100, alpha=0.75, cmap=plt.cm.hot)# 填充等高线 print("===========画出等高线=========") # 8 表示将等高线图十份,0 为两份 C = plt.contour(X, Y, compute_hight(X, Y),8, colors='black',linewidth=.5) print("===========添加数字描述============") plt.clabel(C, inline=True, fontsize=10, ) #去掉横纵坐标的值 plt.xticks(()) plt.yticks(()) plt.show()
二、 Image 图片
import pandas as pd import numpy as np import matplotlib.pyplot as plt ''' 这一节我们讲解怎样在matplotlib中打印出图像。 这里我们打印出的是纯粹的数字,而非自然图像。 我们今天用这样 3x3 的 2D-array 来表示点的颜色,每一个点就是一个pixel。 ''' # image data,像素点 a = np.array([0.313660827978, 0.365348418405, 0.423733120134, 0.365348418405, 0.439599930621, 0.525083754405, 0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3) # interpolation 边缘模糊?? # 我们之前选cmap的参数时用的是:cmap=plt.cmap.bone,而现在,我们可以直接用单引号传入参数。 # origin='lower'代表的就是选择的原点的位置。upper plt.imshow(a, interpolation='nearest', cmap='bone', origin='lower') # 下面我们添加一个colorbar(标注) # shrink参数,使colorbar的长度变短为原来的92%, 默认和原图片长度一致 plt.colorbar(shrink=.92) plt.xticks(()) plt.yticks(()) plt.show()
-
python之matplotlib 3.2.1生成指定尺寸大小指定dpi的图片
2020-04-20 15:07:36import matplotlib.pyplot as plt fig_width = 16/2.54 # 宽度16cm fig_height = 8/2.54 # 高度8cm dpi = 300 # 指定保存的dpi用于保存图片时候使用 fig, ax = plt.subplots( nrows=1, ncols=1, figsize=(fig_...直接上代码
import matplotlib.pyplot as plt fig_width = 16/2.54 # 宽度16cm fig_height = 8/2.54 # 高度8cm dpi = 300 # 指定保存的dpi用于保存图片时候使用 fig, ax = plt.subplots( nrows=1, ncols=1, figsize=(fig_width, fig_height) ) ax.plot([1,2]) fig.savefig('fig.png', dpi=dpi) # 指定分辨率保存 plt.savefig('plt.png', dpi=dpi) # 指定分辨率保存
可见无论是
fig.savefig
还是plt.savefig
都是可以的。弹出窗口的图片的大小由
figsize
和dpi
共同决定。
保存的图片的大小只由figsize
决定,画质只由dpi
决定。 -
python绘制饼图的如何设置高度宽度_Matplotlib添加pictu时调整饼图大小
2021-02-04 09:32:39我做的是一个完美的圆形饼图,然后我在中间加一个白色的圆圈,这样看起来像...在图片:代码:> labels = df.index.values>sizes = (1, 1, 1, 1,1, 1, 1, 1,1, 1, 1, 1,1, 1, 1, 1,1, 1, 1, 1,1, 1, 1, 1,1,... -
数据可视化(1):python中matplotlib库的使用
2020-06-10 21:57:19matplotlib主要做数据可视化图表,它看起来和MATLAB很...plt.figure(figsize=(20,8),dpi=80)#分别是图片宽度、高度、清晰度 2、调整x轴或者y轴刻度范围 x=range(2,26,2) plt.xticks(x)#其中x是已设置x轴的刻度范围 -
Python学习10 ----Matplotlib条形图及散点图
2019-08-27 20:01:46Matplotlib条形图及散点图 代码详见https://github.com/RenDong3/Python_Note 1 读取数据 2 条形图绘制 绘制条形图需要指定条形图的高度以及每个条形距离原点的位置 2.2 添加横纵坐标标签及标题 2.3... -
python空白处一长条红色_python – 删除matplotlib中图像行之间的垂直空白的问题...
2020-12-03 20:33:45通常使用plt.subplots_adjust(wspace = 0,hspace = 0)会将所有轴相互折叠....如果你没问题,你可以删除边框,放入图像,然后将画布的高度调整为图形高度乘以图像的比例乘以图像的行数除以列的数量图片.这... -
python opencv压缩图片_OpenCV Python 缩放图片
2020-12-04 11:57:40By 凌顺2019年9月12日本示例使用的OpenCV版本是:4.1.1运行Python的编辑器...实现代码1,加载图片从文件中加载图像,并输出该图片的大小(高度和宽度)import cv2 # 加载OpenCVimport matplotlib.pyplot as plt # 加载... -
javaweb通过img绝对路径读取图片_深度学习常用图片读写库浅尝
2020-11-27 14:42:36彩色图片的维度:(高度,宽度,通道数);通道为BGR模式,不是正常的RGB模式,需要转换。存储时需要将图片变为uint8格式(即灰度值范围0-255),否则存储图片异常。##读取图片import torch import numpy as np ... -
python读文件夹图片,做数据集
2019-08-31 21:41:24程序功能:读取文件夹内图片并输出形状[m,...n_H:图片高度 n_W:图片宽度 n_C:图片维数 def read_picture(path,n_C): import os from PIL import Image import numpy as np import matplotlib.pyplot as plt ... -
【3】基于OpenCV—Python绘制图片三维空间显示图
2019-10-30 15:20:091 绘制思路 (1)彩色图片转化为灰度图片;...y:图片高度;z:灰度值 2绘制代码 # -*- coding: utf-8 -*- import numpy as np import cv2 as cv import matplotlib.pyplot as plt from mpl_toolkits... -
【seaborn】jointplot 改变图片长宽比,非方形
2021-01-24 16:35:35最近开始写论文了,画好看图是...比如今天的使用jointplot时发现,默认格式图像长宽比是1:1,传统matplotlib中的figsize关键字都无法改变图像的尺寸。而 jointplot关键字中只有height,无法改变图像的高度。 height -
python图片维度转化及数据处理_统计图的基本信息维度_ Python数据分析系列视频课程--玩转数据可视化_数据...
2020-12-23 08:35:45matplotlib包是基于Python平台的统计绘图利器,是在python平台上完成数据可视化不可或缺的工具,而基于matplotlib进一步开发的seaborn,更是将数据呈现与可视化的可用性推到了一个新的高度, pandas + matplotlib + ... -
Seaborn中文教程(六):让图形更美观
2018-12-23 02:38:16让图形充满魅力是非常重要的。...matplotlib支持高度的自定义,但是我们很难弄清楚应该如何调整才能让图片更具吸引力。Seaborn提供了一系列定制好的主题和一个更高级的接口,用于调整基于matplotlib的图形的外观。 i... -
Tensorflow2——图像定位
2020-06-02 07:35:48给定一副图片,我们要输出四个数字(x,y,w,h),图像中某一个点的坐标(x,y),以及图像的宽度和高度,有了这四个数字,我们可以很容易的找到物体的边框。 1、单张图片图像定位 import tensorflow as tf import ... -
Python:画图笔记
2019-09-12 10:30:54问题1:调整ColoBar的高度与图片一致 参考链接:https://stackoverflow.com/questions/18195758/set-matplotlib-colorbar-size-to-match-graph 代码: import matplotlib.pyplot as plt from mpl_toolkits.axes_grid... -
tensorflow学习笔记——验证码识别(四)模型测试
2020-02-11 22:02:00这里对之前训练好的模型进行测试,代码如下: import os import tensorflow as tf from PIL import Image from nets import nets_factory import numpy as np import matplotlib.pyplot as plt ...# 图片高度... -
论文写作流程图软件_一般SCI论文中漂亮的流程图都是用什么软件画的?
2020-12-22 11:51:15虽然我不知道题目中的图片是拿啥的画的,但我知道,用Python&Matplotlib是可以实现的。话不多说,先展示一下我用Matplotlib画出来的结果(cover 题目中的图一)利用Matplotlib复刻出的图一优点①:精准的几何学:... -
分享一个用python画柱状图的原代码
2020-02-02 21:17:44有标签且标签在图片外侧 使用了希腊字母 在每个柱子上边标明了柱子的高度 原代码如下(建议用python3编译, 因为python2的编译结果会有所不同): import json import matplotlib.pyplot as plt import matplotlib ... -
python 读图像_Python读取图像的几种方法
2021-02-03 05:13:53Opencv:opencv读进来的图片已经是一个numpy矩阵了,彩色图片维度是(高度,宽度,通道数),数据类型是uint8。importcv2importnumpyasnp#读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.IMREAD_UNCHANG... -
Python读取图像的几种方法
2021-01-14 09:55:501. Opencv:opencv读进来的图片已经是一个numpy矩阵了,彩色图片维度是(高度,宽度,通道数),数据类型是uint8。 importcv2 importnumpy asnp #读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.... -
day3 图像存取总结
2020-07-20 15:46:54OpenCV 读进来的图片已经是一个 numpy 矩阵了,彩色图片维度是高度、宽度、通道数(height,width,channels),数据类型是 uint8 。 OpenCV 读进来的图片的通道排列是 BGR ,而不是主流的 RGB ,需要转换才能变成 RGB ... -
python numpy实例_Numpy应用案例
2020-12-06 04:27:17处理图像的时候,颜色都是使用RGB三个通道进行叠加而形成的一个颜色 _R:__红色通道__G:__绿色__B: 蓝色_可以使用三维的数组来表示一张图片最高维度0:__图片的高度 次高维1:__图片的宽度 最低维2:__RGB三个元素... -
shape
2020-07-03 15:45:20对于图像来说: img.shape[0]:图像的垂直尺寸(高度) ...import matplotlib.image as mpimg # mpimg 用于读取图片 if name == ‘main’: img = mpimg.imread(‘cat.jpg’) # 读取和代码处于同一目录下的 img.pn -
手把手教你用Keras框架写CNN(附全部代码和注解)
2020-07-03 20:33:22Keras框架能简单上手,高度集成,利用这个框架写出来的CNN就可以作图片识别了。我们这里识别minst数据集。 [mnist数据集](链接:https://pan.baidu.com/s/1Jt4p5EYF5mPzhiGGhrMN3A 提取码:mz1w) mnist数据集包含60,... -
facial_recognition_opencv-源码
2021-03-21 17:35:04该项目的目的是使用OpenCV来识别图片中的面部和眼睛。然后将OpenCV与VGGFace神经网络结合起来,以便在网络摄像头摘要中进行一次镜头学习和识别脸部。 使用方法 深度学习 数据可视化 使用预训练的模型 面部和眼睛检测... -
MyWays_FashionMNIST_rohan-源码
2021-04-10 22:57:39Fashion-MNIST是Zalando文章图片的数据集-由训练和测试集组成 每个示例都是28x28灰度图像 上面提到的数据集只有4个类。 每个图像的高度为28像素,宽度为28像素,总计784像素。 每个像素都有一个与之关联的像素值... -
在使用sns.lmplot时,图像显示不全
2020-07-29 17:45:20代码如下 ``` ... df_select = df.loc[df.cyl.isin([4,8]),:] #isin(x) 判断x是否存在序列中,若存在则返回True #绘制图像 ...gridobj = sns.lmplot(x='displ'# 横坐标:发动机排量 ...seaborn库 和matplotlib都是最新版 -
InvalidArgumentError: Input to reshape is a tensor with 152000 values, but the requested shape ...
2019-10-05 22:36:34h_pool2_flat = tf.reshape(h_conv2, [-1, 3*3*64])#把3*3,高度为64的三维图片拉成一维数组 降维处理 h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob...