-
matplotlib 指数符号不显示 MathTextWarning
2020-06-30 00:23:56matplotlib 指数符号不显示,报错:MathTextWarning: Font ‘default’ does not have a glyph for ‘-’ [U+2212], 解决办法:加: import matplotlib as mpl mpl.rcParams.update( { ‘text.usetex’: False, ... -
python自定义结束符号_python – Matplotlib自定义标记/符号
2021-02-04 12:04:21所以发现它只是使用数学符号,而不是指存储在matplotlib模块中的任何分开的基于矢量的标记。from matplotlib import pyplot as pltimport numpy as npfrom numpy.random import randintimport matplotlibx = np.a...所以发现它只是使用数学符号,而不是指存储在matplotlib模块中的任何分开的基于矢量的标记。
from matplotlib import pyplot as plt
import numpy as np
from numpy.random import randint
import matplotlib
x = np.arange(0.0, 100.0, 2.0)
y = x ** 1.3 + np.random.rand(*x.shape) * 30.0
s = np.random.rand(*x.shape) * 800 + 500
markers = ['\\alpha', '\\beta', '\gamma', '\sigma','\infty', \
'\spadesuit', '\heartsuit', '\diamondsuit', '\clubsuit', \
'\\bigodot', '\\bigotimes', '\\bigoplus', '\imath', '\\bowtie', \
'\\bigtriangleup', '\\bigtriangledown', '\oslash' \
'\ast', '\\times', '\circ', '\\bullet', '\star', '+', \
'\Theta', '\Xi', '\Phi', \
'\$', '\#', '\%', '\S']
def getRandomMarker():
return "$"+markers[randint(0,len(markers),1)]+"$"
def getMarker(i):
# Use modulus in order not to have the index exceeding the lenght of the list (markers)
return "$"+markers[i % len(markers)]+"$"
for i, mi in enumerate(markers):
plt.plot(x[i], y[i], "b", alpha=0.5, marker=getRandomMarker(), markersize=randint(16,26,1))
plt.plot(x[i], y[i]+50, "m", alpha=0.5, marker=getMarker(i), markersize=randint(16,26,1))
# Let's see if their "center" is located where we expect them to be...
plt.plot(x[i], y[i]+100, "y", alpha=0.5, marker=getMarker(i), markersize=24)
plt.plot(x[i], y[i]+100, "k+", markersize=12, markeredgewidth=2)
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.xlim( -5, plt.xlim()[1]+5 )
plt.ylim( 0, plt.ylim()[1]*1.1 )
gcf().set_size_inches(12,6)
plt.show()
不要忘记投票,如果你发现这个答案有用.. thx
-
matplotlib中的marker符号表
2020-07-24 14:15:29在编写代码和写论文时都会需要一些可视化图形来查看效果,尤其是折线图等会需要一些标记来更直观的进行分析,下面是matplotlib中的marker标记大全。 在使用时直接 marker = “v” 放进代码里就可以,用什么符号就换...在编写代码和写论文时都会需要一些可视化图形来查看效果,尤其是折线图等会需要一些标记来更直观的进行分析,下面是matplotlib中的marker标记大全。
在使用时直接 marker = “v” 放进代码里就可以,用什么符号就换成对应的标记。 -
Matplotlib
2020-07-21 00:35:35文章目录matplotlib概述matplotlib基本功能matplotlib基本功能详解基本绘图绘图核心API线型、线宽和颜色设置坐标轴范围设置坐标刻度设置...matplotlib point样式laTeX语法表示数学符号示例LaTeX语法集合cmap颜色映射表...文章目录
matplotlib概述
matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形。
matplotlib基本功能详解
基本绘图
绘图核心API
案例:绘制一条余弦曲线
import numpy as np import matplotlib.pyplot as mp # xarray: <序列> 水平坐标序列 # yarray: <序列> 垂直坐标序列 mp.plot(xarray, yarray) #显示图表 mp.show()
绘制水平线与垂直线:
import numpy as np import matplotlib.pyplot as mp # vertical 绘制垂直线 mp.vlines(vval, ymin, ymax, ...) # horizotal 绘制水平线 mp.hlines(xval, xmin, xmax, ...) #显示图表 mp.show()
线型、线宽和颜色
案例:绘制一条正弦曲线
# 数字 #color: <关键字参数> 颜色 # 英文颜色单词 或 常见颜色英文单词首字母 或 #495434 或 (1,1,1) 或 (1,1,1,1) #alpha: <关键字参数> 透明度 # 浮点数值 mp.plot(xarray, yarray, linestyle='', linewidth=1, color='', alpha=0.5)
设置坐标轴范围
案例:把坐标轴范围设置为 -π ~ π
#x_limt_min: <float> x轴范围最小值 #x_limit_max: <float> x轴范围最大值 mp.xlim(x_limt_min, x_limit_max) #y_limt_min: <float> y轴范围最小值 #y_limit_max: <float> y轴范围最大值 mp.ylim(y_limt_min, y_limit_max)
设置坐标刻度
案例:把横坐标的刻度显示为:0, π/2, π, 3π/2, 2π
#x_val_list: x轴刻度值序列 #x_text_list: x轴刻度标签文本序列 [可选] mp.xticks(x_val_list , x_text_list ) #y_val_list: y轴刻度值序列 #y_text_list: y轴刻度标签文本序列 [可选] mp.yticks(y_val_list , y_text_list )
刻度文本的特殊语法 – LaTex排版语法字符串
r'$x^n+y^n=z^n$', r'$\int\frac{1}{x} dx = \ln |x| + C$', r'$-\frac{\pi}{2}$'
设置坐标轴
坐标轴名:left / right / bottom / top
# 获取当前坐标轴字典,{'left':左轴,'right':右轴,'bottom':下轴,'top':上轴 } ax = mp.gca() # 获取其中某个坐标轴 axis = ax.spines['坐标轴名'] # 设置坐标轴的位置。 该方法需要传入2个元素的元组作为参数 # type: <str> 移动坐标轴的参照类型 一般为'data' (以数据的值作为移动参照值) # val: 参照值 axis.set_position((type, val)) # 设置坐标轴的颜色 # color: <str> 颜色值字符串 axis.set_color(color)
案例:设置坐标轴至中心。
#设置坐标轴 ax = mp.gca() axis_b = ax.spines['bottom'] axis_b.set_position(('data', 0)) axis_l = ax.spines['left'] axis_l.set_position(('data', 0)) ax.spines['top'].set_color('none') ax.spines['right'].set_color('none')
图例
显示两条曲线的图例,并测试loc属性。
# 再绘制曲线时定义曲线的label # label: <关键字参数 str> 支持LaTex排版语法字符串 mp.plot(xarray, yarray ... label='', ...) # 设置图例的位置 # loc: <关键字参数> 制定图例的显示位置 (若不设置loc,则显示默认位置) # =============== ============= # Location String Location Code # =============== ============= # '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 # =============== ============= mp.legend(loc='')
特殊点
案例:绘制当x=3π/4时两条曲线上的特殊点。
# xarray: <序列> 所有需要标注点的水平坐标组成的序列 # yarray: <序列> 所有需要标注点的垂直坐标组成的序列 mp.scatter(xarray, yarray, marker='', #点型 ~ matplotlib.markers s='', #大小 edgecolor='', #边缘色 facecolor='', #填充色 zorder=3 #绘制图层编号 (编号越大,图层越靠上) )
marker点型可参照:help(matplotlib.markers)
也可参照附录: matplotlib point样式
备注
案例:为在某条曲线上的点添加备注,指明函数方程与值。
# 在图表中为某个点添加备注。包含备注文本,备注箭头等图像的设置。 mp.annotate( r'$\frac{\pi}{2}$', #备注中显示的文本内容 xycoords='data', #备注目标点所使用的坐标系(data表示数据坐标系) xy=(x, y), #备注目标点的坐标 textcoords='offset points', #备注文本所使用的坐标系(offset points表示参照点的偏移坐标系) xytext=(x, y), #备注文本的坐标 fontsize=14, #备注文本的字体大小 arrowprops=dict() #使用字典定义文本指向目标点的箭头样式 )
arrowprops参数使用字典定义指向目标点的箭头样式
#arrowprops字典参数的常用key arrowprops=dict( arrowstyle='', #定义箭头样式 connectionstyle='' #定义连接线的样式 )
箭头样式(arrowstyle)字符串如下
============ ============================================= Name Attrs ============ ============================================= '-' None '->' head_length=0.4,head_width=0.2 '-[' widthB=1.0,lengthB=0.2,angleB=None '|-|' widthA=1.0,widthB=1.0 '-|>' head_length=0.4,head_width=0.2 '<-' head_length=0.4,head_width=0.2 '<->' head_length=0.4,head_width=0.2 '<|-' head_length=0.4,head_width=0.2 '<|-|>' head_length=0.4,head_width=0.2 'fancy' head_length=0.4,head_width=0.4,tail_width=0.4 'simple' head_length=0.5,head_width=0.5,tail_width=0.2 'wedge' tail_width=0.3,shrink_factor=0.5 ============ =============================================
连接线样式(connectionstyle)字符串如下
============ ============================================= Name Attrs ============ ============================================= 'angle' angleA=90,angleB=0,rad=0.0 'angle3' angleA=90,angleB=0` 'arc' angleA=0,angleB=0,armA=None,armB=None,rad=0.0 'arc3' rad=0.0 'bar' armA=0.0,armB=0.0,fraction=0.3,angle=None ============ =============================================
图形对象(图形窗口)
案例:绘制两个窗口,一起显示。
# 手动构建 matplotlib 窗口 mp.figure( '', #窗口标题栏文本 figsize=(4, 3), #窗口大小 <元组> dpi=120, #像素密度 facecolor='' #图表背景色 ) mp.show()
mp.figure方法不仅可以构建一个新窗口,如果已经构建过title='xxx’的窗口,又使用figure方法构建了title=‘xxx’ 的窗口的话,mp将不会创建新的窗口,而是把title='xxx’的窗口置为当前操作窗口。
设置当前窗口的参数
案例:测试窗口相关参数
# 设置图表标题 显示在图表上方 mp.title(title, fontsize=12) # 设置水平轴的文本 mp.xlabel(x_label_str, fontsize=12) # 设置垂直轴的文本 mp.ylabel(y_label_str, fontsize=12) # 设置刻度参数 labelsize设置刻度字体大小 mp.tick_params(..., labelsize=8, ...) # 设置图表网格线 linestyle设置网格线的样式 # - or solid 粗线 # -- or dashed 虚线 # -. or dashdot 点虚线 # : or dotted 点线 mp.grid(linestyle='') # 设置紧凑布局,把图表相关参数都显示在窗口中 mp.tight_layout()
子图
矩阵式布局
绘制矩阵式子图布局相关API:
mp.figure('Subplot Layout', facecolor='lightgray') # 拆分矩阵 # rows: 行数 # cols: 列数 # num: 编号 mp.subplot(rows, cols, num) # 1 2 3 # 4 5 6 # 7 8 9 mp.subplot(3, 3, 5) #操作3*3的矩阵中编号为5的子图 mp.subplot(335) #简写
案例:绘制9宫格矩阵式子图,每个子图中写一个数字。
mp.figure('Subplot Layout', facecolor='lightgray') for i in range(9): mp.subplot(3, 3, i+1) mp.text( 0.5, 0.5, i+1, ha='center', va='center', size=36, alpha=0.5, withdash=False ) mp.xticks([]) mp.yticks([]) mp.tight_layout() mp.show()
网格式布局
网格式布局支持单元格的合并。
绘制网格式子图布局相关API:
import matplotlib.gridspec as mg mp.figure('Grid Layout', facecolor='lightgray') # 调用GridSpec方法拆分网格式布局 # rows: 行数 # cols: 列数 # gs = mg.GridSpec(rows, cols) 拆分成3行3列 gs = mg.GridSpec(3, 3) # 合并0行与0、1列为一个子图表 mp.subplot(gs[0, :2]) mp.text(0.5, 0.5, '1', ha='center', va='center', size=36) mp.show()
案例:绘制一个自定义网格布局。
import matplotlib.gridspec as mg mp.figure('GridLayout', facecolor='lightgray') gridsubs = mp.GridSpec(3, 3) # 合并0行、0/1列为一个子图 mp.subplot(gridsubs[0, :2]) mp.text(0.5, 0.5, 1, ha='center', va='center', size=36) mp.tight_layout() mp.xticks([]) mp.yticks([])
自由式布局
自由式布局相关API:
mp.figure('Flow Layout', facecolor='lightgray') # 设置图标的位置,给出左下角点坐标与宽高即可 # left_bottom_x: 坐下角点x坐标 # left_bottom_x: 坐下角点y坐标 # width: 宽度 # height: 高度 # mp.axes([left_bottom_x, left_bottom_y, width, height]) mp.axes([0.03, 0.03, 0.94, 0.94]) mp.text(0.5, 0.5, '1', ha='center', va='center', size=36) mp.show()
案例:测试自由式布局,定位子图。
mp.figure('FlowLayout', facecolor='lightgray') mp.axes([0.1, 0.2, 0.5, 0.3]) mp.text(0.5, 0.5, 1, ha='center', va='center', size=36) mp.show()
刻度定位器
刻度定位器相关API:
# 获取当前坐标轴 ax = mp.gca() # 设置水平坐标轴的主刻度定位器 ax.xaxis.set_major_locator(mp.NullLocator()) # 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1 ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
案例:绘制一个数轴。
mp.figure('Locators', facecolor='lightgray') # 获取当前坐标轴 ax = mp.gca() # 隐藏除底轴以外的所有坐标轴 ax.spines['left'].set_color('none') ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') # 将底坐标轴调整到子图中心位置 ax.spines['bottom'].set_position(('data', 0)) # 设置水平坐标轴的主刻度定位器 ax.xaxis.set_major_locator(mp.NullLocator()) # 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1 ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1)) # 标记所用刻度定位器类名 mp.text(5, 0.3, 'NullLocator()', ha='center', size=12)
案例:使用for循环测试刻度器样式:
locators = ['mp.NullLocator()', 'mp.MaxNLocator(nbins=4)'] for i, locator in enumerate(locators): mp.subplot(len(locators), 1, i+1) mp.xlim(0, 10) mp.ylim(-1, 1) mp.yticks([]) # 获取当前坐标轴 ax = mp.gca() # 隐藏除底轴以外的所有坐标轴 ax.spines['left'].set_color('none') ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') # 将底坐标轴调整到子图中心位置 ax.spines['bottom'].set_position(('data', 0)) # 设置水平坐标轴的主刻度定位器 ax.xaxis.set_major_locator(eval( )) # 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1 ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1)) mp.plot(np.arange(11), np.zeros(11), c='none') # 标记所用刻度定位器类名 mp.text(5, 0.3, locator, ha='center', size=12)
常用刻度器如下
# 空定位器:不绘制刻度 mp.NullLocator() # 最大值定位器: # 最多绘制nbins+1个刻度 mp.MaxNLocator(nbins=3) # 定点定位器:根据locs参数中的位置绘制刻度 mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10]) # 自动定位器:由系统自动选择刻度的绘制位置 mp.AutoLocator() # 索引定位器:由offset确定起始刻度,由base确定相邻刻度的间隔 mp.IndexLocator(offset=0.5, base=1.5) # 多点定位器:从0开始,按照参数指定的间隔(缺省1)绘制刻度 mp.MultipleLocator() # 线性定位器:等分numticks-1份,绘制numticks个刻度 mp.LinearLocator(numticks=21) # 对数定位器:以base为底,绘制刻度 mp.LogLocator(base=2)
刻度网格线
绘制刻度网格线的相关API:
ax = mp.gca() #绘制刻度网格线 ax.grid( which='', # 'major'/'minor' <-> '主刻度'/'次刻度' axis='', # 'x'/'y'/'both' <-> 绘制x或y轴 linewidth=1, # 线宽 linestyle='', # 线型 color='', # 颜色 alpha=0.5 # 透明度 )
案例:绘制曲线 [1, 10, 100, 1000, 100, 10, 1],然后设置刻度网格线,测试刻度网格线的参数。
y = np.array([1, 10, 100, 1000, 100, 10, 1]) mp.figure('Normal & Log', facecolor='lightgray') mp.subplot(211) mp.title('Normal', fontsize=20) mp.ylabel('y', fontsize=14) ax = mp.gca() ax.xaxis.set_major_locator(mp.MultipleLocator(1.0)) ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1)) ax.yaxis.set_major_locator(mp.MultipleLocator(250)) ax.yaxis.set_minor_locator(mp.MultipleLocator(50)) mp.tick_params(labelsize=10) ax.grid(which='major', axis='both', linewidth=0.75, linestyle='-', color='orange') ax.grid(which='minor', axis='both', linewidth=0.25, linestyle='-', color='orange') mp.plot(y, 'o-', c='dodgerblue', label='plot') mp.legend()
半对数坐标
y轴将以指数方式递增。 基于半对数坐标绘制第二个子图,表示曲线:[1, 10, 100, 1000, 100, 10, 1]。
mp.figure('Grid', facecolor='lightgray') y = [1, 10, 100, 1000, 100, 10, 1] mp.semilogy(y) mp.show()
散点图
可以通过每个点的坐标、颜色、大小和形状表示不同的特征值。
身高 体重 性别 年龄段 种族 180 80 男 中年 亚洲 160 50 女 青少 美洲 绘制散点图的相关API:
mp.scatter( x, # x轴坐标数组 y, # y轴坐标数组 marker='', # 点型 s=10, # 大小 color='', # 颜色 edgecolor='', # 边缘颜色 facecolor='', # 填充色 zorder='' # 图层序号 )
numpy.random提供了normal函数用于产生符合 正态分布 的随机数
n = 100 # 172: 期望值 # 10: 标准差 # n: 数字生成数量 x = np.random.normal(172, 20, n) y = np.random.normal(60, 10, n)
案例:绘制平面散点图。
mp.figure('scatter', facecolor='lightgray') mp.title('scatter') mp.scatter(x, y) mp.show()
设置点的颜色
mp.scatter(x, y, c='red') #直接设置颜色 d = (x-172)**2 + (y-60)**2 mp.scatter(x, y, c=d, cmap='jet') #以c作为参数,取cmap颜色映射表中的颜色值
cmap颜色映射表参照附件:cmap颜色映射表
填充
以某种颜色自动填充两条曲线的闭合区域。
mp.fill_between( x, # x轴的水平坐标 sin_x, # 下边界曲线上点的垂直坐标 cos_x, # 上边界曲线上点的垂直坐标 sin_x<cos_x, # 填充条件,为True时填充 color='', # 填充颜色 alpha=0.2 # 透明度 )
案例:绘制两条曲线: sin_x = sin(x) cos_x = cos(x / 2) / 2 [0-8π]
n = 1000 x = np.linspace(0, 8 * np.pi, n) sin_y = np.sin(x) cos_y = np.cos(x / 2) / 2 mp.figure('Fill', facecolor='lightgray') mp.title('Fill', fontsize=20) mp.xlabel('x', fontsize=14) mp.ylabel('y', fontsize=14) mp.tick_params(labelsize=10) mp.grid(linestyle=':') mp.plot(x, sin_y, c='dodgerblue', label=r'$y=sin(x)$') mp.plot(x, cos_y, c='orangered', label=r'$y=\frac{1}{2}cos(\frac{x}{2})$') mp.fill_between(x, cos_y, sin_y, cos_y < sin_y, color='dodgerblue', alpha=0.5) mp.fill_between(x, cos_y, sin_y, cos_y > sin_y, color='orangered', alpha=0.5) mp.legend() mp.show()
条形图(柱状图)
绘制柱状图的相关API:
mp.figure('Bar', facecolor='lightgray') mp.bar( x, # 水平坐标数组 y, # 柱状图高度数组 width, # 柱子的宽度 color='', # 填充颜色 label='', # alpha=0.2 # )
案例:先以柱状图绘制苹果12个月的销量,然后再绘制橘子的销量。
apples = np.array([30, 25, 22, 36, 21, 29, 20, 24, 33, 19, 27, 15]) oranges = np.array([24, 33, 19, 27, 35, 20, 15, 27, 20, 32, 20, 22]) mp.figure('Bar' , facecolor='lightgray') mp.title('Bar', font size=20) mp.xlabel('Month', fontsize=14) mp.ylabel('Price', fontsize=14) mp.tick_params(labelsize=10) mp.grid(axis='y', linestyle=':') mp.ylim((0, 40)) x = np.arange(len(apples)) mp.bar(x-0.2, apples, 0.4, color='dodgerblue',label='Apple') mp.bar(x + 0.2, oranges, 0.4, color='orangered',label='Orange', alpha=0.75) mp.xticks(x, [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']) mp.legend() mp.show()
饼图
绘制饼状图的基本API:
mp.pie( values, # 值列表 spaces, # 扇形之间的间距列表 labels, # 标签列表 colors, # 颜色列表 '%d%%', # 标签所占比例格式 shadow=True, # 是否显示阴影 startangle=90 # 逆时针绘制饼状图时的起始角度 radius=1 # 半径 )
案例:绘制饼状图显示5门语言的流行程度:
mp.figure('pie', facecolor='lightgray') #整理数据 values = [26, 17, 21, 29, 11] spaces = [0.05, 0.01, 0.01, 0.01, 0.01] labels = ['Python', 'JavaScript', 'C++', 'Java', 'PHP'] colors = ['dodgerblue', 'orangered', 'limegreen', 'violet', 'gold'] mp.figure('Pie', facecolor='lightgray') mp.title('Pie', fontsize=20) # 等轴比例 mp.axis('equal') mp.pie( values, # 值列表 spaces, # 扇形之间的间距列表 labels, # 标签列表 colors, # 颜色列表 '%d%%', # 标签所占比例格式 shadow=True, # 是否显示阴影 startanle=90 # 逆时针绘制饼状图时的起始角度 radius=1 # 半径 )
等高线图
组成等高线需要网格点坐标矩阵,也需要每个点的高度。所以等高线属于3D数学模型范畴。
绘制等高线的相关API:
mp.contourf(x, y, z, 8, cmap='jet') cntr = mp.contour( x, # 网格坐标矩阵的x坐标 (2维数组) y, # 网格坐标矩阵的y坐标 (2维数组) z, # 网格坐标矩阵的z坐标 (2维数组) 8, # 把等高线绘制成8部分 colors='black', # 等高线的颜色 linewidths=0.5 # 线宽 )
案例:生成网格坐标矩阵,并且绘制等高线:
n = 1000 # 生成网格化坐标矩阵 x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n)) # 根据每个网格点坐标,通过某个公式计算z高度坐标 z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2) mp.figure('Contour', facecolor='lightgray') mp.title('Contour', fontsize=20) mp.xlabel('x', fontsize=14) mp.ylabel('y', fontsize=14) mp.tick_params(labelsize=10) mp.grid(linestyle=':') # 绘制等高线图 mp.contourf(x, y, z, 8, cmap='jet') cntr = mp.contour(x, y, z, 8, colors='black', linewidths=0.5) # 为等高线图添加高度标签 mp.clabel(cntr, inline_spacing=1, fmt='%.1f', fontsize=10) mp.show()
热成像图
用图形的方式显示矩阵及矩阵中值的大小
1 2 3
4 5 6
7 8 9绘制热成像图的相关API:
# 把矩阵z图形化,使用cmap表示矩阵中每个元素值的大小 # origin: 坐标轴方向 # upper: 缺省值,原点在左上角 # lower: 原点在左下角 mp.imshow(z, cmap='jet', origin='low')
使用颜色条显示热度值:
mp.colorbar()
极坐标系
与笛卡尔坐标系不同,某些情况下极坐标系适合显示与角度有关的图像。例如雷达等。极坐标系可以描述极径ρ与极角θ的线性关系。
mp.figure("Polar", facecolor='lightgray') mp.gca(projection='polar') mp.title('Porlar', fontsize=20) mp.xlabel(r'$\theta$', fontsize=14) mp.ylabel(r'$\rho$', fontsize=14) mp.tick_params(labelsize=10) mp.grid(linestyle=':') mp.show()
在极坐标系中绘制曲线:
#准备数据 t = np.linspace(0, 4*np.pi, 1000) r = 0.8 * t mp.plot(t, r) mp.show()
案例,在极坐标系中绘制正弦函数。 y=3 sin(6x)
x = np.linspace(0, 6*np.pi, 1000) y = 3*np.sin(6*x) mp.plot(x, y)
3D图像绘制
matplotlib支持绘制三维曲面。若希望绘制三维曲面,需要使用axes3d提供的3d坐标系。
from mpl_toolkits.mplot3d import axes3d ax3d = mp.gca(projection='3d') # class axes3d
matplotlib支持绘制三维点阵、三维曲面、三维线框图:
ax3d.scatter(..) # 绘制三维点阵 ax3d.plot_surface(..) # 绘制三维曲面 ax3d.plot_wireframe(..) # 绘制三维线框图
3d散点图的绘制相关API:
ax3d.scatter( x, # x轴坐标数组 y, # y轴坐标数组 marker='', # 点型 s=10, # 大小 zorder='', # 图层序号 color='', # 颜色 edgecolor='', # 边缘颜色 facecolor='', # 填充色 c=v, # 颜色值 根据cmap映射应用相应颜色 cmap='' # )
案例:随机生成3组坐标,程标准正态分布规则,并且绘制它们。
n = 1000 x = np.random.normal(0, 1, n) y = np.random.normal(0, 1, n) z = np.random.normal(0, 1, n) d = np.sqrt(x ** 2 + y ** 2 + z ** 2) mp.figure('3D Scatter') ax = mp.gca(projection='3d') # 创建三维坐标系 mp.title('3D Scatter', fontsize=20) ax.set_xlabel('x', fontsize=14) ax.set_ylabel('y', fontsize=14) ax.set_zlabel('z', fontsize=14) mp.tick_params(labelsize=10) ax.scatter(x, y, z, s=60, c=d, cmap='jet_r', alpha=0.5) mp.show()
3d平面图的绘制相关API:
ax3d.plot_surface( x, # 网格坐标矩阵的x坐标 (2维数组) y, # 网格坐标矩阵的y坐标 (2维数组) z, # 网格坐标矩阵的z坐标 (2维数组) rstride=30, # 行跨距 cstride=30, # 列跨距 cmap='jet' # 颜色映射 )
案例:绘制3d平面图
n = 1000 # 生成网格化坐标矩阵 x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n)) # 根据每个网格点坐标,通过某个公式计算z高度坐标 z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2) mp.figure('3D', facecolor='lightgray') ax3d = mp.gca(projection='3d') mp.title('3D', fontsize=20) ax3d.set_xlabel('x', fontsize=14) ax3d.set_ylabel('y', fontsize=14) ax3d.set_zlabel('z', fontsize=14) mp.tick_params(labelsize=10) # 绘制3D平面图 # rstride: 行跨距 # cstride: 列跨距 ax3d.plot_surface(x,y,z,rstride=30,cstride=30, cmap='jet')
案例:3d线框图的绘制
# 绘制3D平面图 # rstride: 行跨距 # cstride: 列跨距 ax3d.plot_wireframe(x,y,z,rstride=30,cstride=30, linewidth=1, color='dodgerblue')
简单动画
动画即是在一段时间内快速连续的重新绘制图像的过程。
matplotlib提供了方法用于处理简单动画的绘制。定义update函数用于即时更新图像。
import matplotlib.animation as ma #定义更新函数行为 def update(number): pass # 每隔10毫秒执行一次update更新函数,作用于mp.gcf()当前窗口对象 # mp.gcf(): 获取当前窗口 # update: 更新函数 # interval: 间隔时间(单位:毫秒) anim = ma.FuncAnimation(mp.gcf(), update, interval=10) mp.show()
案例:随机生成各种颜色的100个气泡。让他们不断的增大。
#自定义一种可以存放在ndarray里的类型,用于保存一个球 ball_type = np.dtype([ ('position', float, 2), # 位置(水平和垂直坐标) ('size', float, 1), # 大小 ('growth', float, 1), # 生长速度 ('color', float, 4)]) # 颜色(红、绿、蓝和透明度) #随机生成100个点对象 n = 100 balls = np.zeros(100, dtype=ball_type) balls['position']=np.random.uniform(0, 1, (n, 2)) balls['size']=np.random.uniform(40, 70, n) balls['growth']=np.random.uniform(10, 20, n) balls['color']=np.random.uniform(0, 1, (n, 4)) mp.figure("Animation", facecolor='lightgray') mp.title("Animation", fontsize=14) mp.xticks mp.yticks(()) sc = mp.scatter( balls['position'][:, 0], balls['position'][:, 1], balls['size'], color=balls['color'], alpha=0.5) #定义更新函数行为 def update(number): balls['size'] += balls['growth'] #每次让一个气泡破裂,随机生成一个新的 boom_ind = number % n balls[boom_ind]['size']=np.random.uniform(40, 70, 1) balls[boom_ind]['position']=np.random.uniform(0, 1, (1, 2)) # 重新设置属性 sc.set_sizes(balls['size']) sc.set_offsets(balls['position']) # 每隔30毫秒执行一次update更新函数,作用于mp.gcf()当前窗口对象 # mp.gcf(): 获取当前窗口 # update: 更新函数 # interval: 间隔时间(单位:毫秒) anim = ma.FuncAnimation(mp.gcf(), update, interval=30) mp.show()
使用生成器函数提供数据,实现动画绘制
在很多情况下,绘制动画的参数是动态获取的,matplotlib支持定义generator生成器函数,用于生成数据,把生成的数据交给update函数更新图像:
import matplotlib.animation as ma #定义更新函数行为 def update(data): t, v = data ... pass def generator(): yield t, v # 每隔10毫秒将会先调用生成器,获取生成器返回的数据, # 把生成器返回的数据交给并且调用update函数,执行更新图像函数 anim = ma.FuncAnimation(mp.gcf(), update, generator,interval=10)
案例:绘制信号曲线:y=sin(2 * π * t) * exp(sin(0.2 * π * t)),数据通过生成器函数生成,在update函数中绘制曲线。
mp.figure("Signal", facecolor='lightgray') mp.title("Signal", fontsize=14) mp.xlim(0, 10) mp.ylim(-3, 3) mp.grid(linestyle='--', color='lightgray', alpha=0.5) pl = mp.plot([], [], color='dodgerblue', label='Signal')[0] pl.set_data([],[]) x = 0 def update(data): t, v = data x, y = pl.get_data() x.append(t) y.append(v) #重新设置数据源 pl.set_data(x, y) #移动坐标轴 if(x[-1]>10): mp.xlim(x[-1]-10, x[-1]) def y_generator(): global x y = np.sin(2 * np.pi * x) * np.exp(np.sin(0.2 * np.pi * x)) yield (x, y) x += 0.05 anim = ma.FuncAnimation(mp.gcf(), update, y_generator, interval=20) mp.tight_layout() mp.show()
附录
matplotlib colors颜色字符串
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OIRriyJp-1595262313120)(C:/Users/Administrator/Desktop/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E7%AC%94%E8%AE%B0/matplotlib_images/matplotlib_colors.png)]
matplotlib point样式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ox19ZiWw-1595262313124)(C:/Users/Administrator/Desktop/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E7%AC%94%E8%AE%B0/matplotlib_images/matplotlib_markers.png)]
laTeX语法表示数学符号示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tiOgbOg9-1595262313126)(C:/Users/Administrator/Desktop/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E7%AC%94%E8%AE%B0/matplotlib_images/LaTeX_eg.gif)]
LaTeX语法集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8EiOqlTL-1595262313128)(C:/Users/Administrator/Desktop/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E7%AC%94%E8%AE%B0/matplotlib_images/laTex_.png)]
cmap颜色映射表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uhmptVzj-1595262313129)(C:/Users/Administrator/Desktop/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E7%AC%94%E8%AE%B0/matplotlib_images/matplotlib_cmap.png)]
-
matplotlib绘图时汉字,符号显示问题
2018-07-30 14:14:09在用matplotlib进行作图时,如果含有中文标签,会发现不能正常显示,这是因为matplotlib的默认字体是英文字体,解决它的办法是,在作图前手动指定默认字体为中文字体,如黑体(SimHei)。 import matplotlib.... -
【Matplotlib】 标注摄氏度符号
2016-07-26 16:36:00之前论文中作图遇到的,其实也很简单。 关键的代码如下: ax.set_xlabel('Temperature ($^\circ$C)') ...import matplotlib.pyplot as plt x = range(10,60,1) y = range(-100, 0, 2) fig = plt.figure() ax ... -
matplotlib显示特殊符号(gamma,alpha,beta)
2021-03-28 15:51:37plt.title(r'$\gamma$') plt.title(r'$\alpha$') plt.title(r'$\beta$') -
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2020-09-20 12:56:22主要介绍了Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法,结合具体实例分析了Python使用Matplotlib模块过程中针对中文及特殊符号的显示方法,需要的朋友可以参考下 -
matplotlib无法显示中文和符号及未完全显示绘图的解决办法
2020-01-06 19:27:14matplotlib无法显示中文和符号的解决办法 import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’] = [‘SimHei’] #显示中文 plt.rcParams[‘axes.unicode_minus’]=False #用来正常显示负号 绘图未... -
matplotlib绘图中文设置、负号显示、数学符号
2020-11-04 15:01:11import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文 mpl.rcParams['axes.unicode_minus'] = False # 设置支持负号显示 案例 import numpy as np ... -
Matplotlib模块
2019-09-23 08:20:01使用嵌入式的Latex输出具有印刷级别的图表,科学表达式和符号文本 对图表的组成元素实现精细化控制 导入和画图准备 导入模块matplotlib.pyplot import matplotlib.pyplot as plt 在notebook中显示所绘图像 %... -
matplotlib 中文_matplotlib中文乱码
2020-12-04 19:45:42matplotlib中文乱码问题matplotlib中文乱码以及减号不能正常显示的原因在于默认的字体或者编码不支持中文和一些符号,一般我们的解决思路就是重新设置画图的字体与编码import matplolib查看支持的字体现在我们就需要... -
python显示数学符号_Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法...
2020-12-29 05:51:05本文实例讲述了Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法。分享给大家供大家参考,具体如下:Matplotlib中文显示问题——用例子说明问题#-*- coding: utf-8 -*-from pylab import *t = a... -
python中中文图标_matplotlib同时显示中文和特殊符号
2021-01-29 04:49:26Matplotlib中文显示问题——用例子说明问题#-*- coding: utf-8 -*-from pylab import *t = arange(-4*pi, 4*pi, 0.01)y = sin(t)/tplt.plot(t, y)plt.title('test')plt.xlabel(u'\u2103',fontproperties='SimHei')#... -
成功解决matplotlib绘图中描述性字体特殊符号(比如数值的右上角标和右下角标表示)
2020-11-30 21:17:25成功解决matplotlib绘图中描述性字体特殊符号(比如数值的右上角标和右下角标表示) 目录 解决问题 解决思路 解决方法 解决问题 matplotlib绘图中描述性字体特殊符号(比如数值的右上角标和右下角... -
python箭头符号怎么打_python – 箭头的Matplotlib图例
2020-12-05 11:24:58您可以向legend命令添加任意艺术家,如here所述import matplotlib.pyplot as pltf = plt.figure()arrow = plt.arrow(0, 0, 0.5, 0.6, 'dummy',label='My label')plt.legend([arrow,], ['My label',])箭头艺术家不允许... -
matplotlib绘图
2020-12-28 21:41:19import matplotlib.pyplot as plt # 一、画布参数: # 1 修改字体 plt.rcParams['font.sans-serif']='SimHei' # 2 修改符号显示: plt.rcParams['axes.unicode_minus']=False # 3 修改内部背景颜色(轴内颜色): plt... -
[Python3] Matplotlib.pyplot.plot图形符号、风格及颜色缩写速查表
2020-05-10 23:39:41Matplotlib.pyplot.plot图形符号、线条风格及颜色简写形式速查表 注:图形符号、线条风格及颜色均为plot函数的可选参数 如不指定符号和线条风格,默认为无符号的实线 如不指定颜色,Matplotlib会为多条线自动循环... -
matplotlib中文乱码问题_matplotlib中文乱码
2021-01-22 21:26:56matplotlib中文乱码问题matplotlib中文乱码以及减号不能正常显示的原因在于默认的字体或者编码不支持中文和一些符号,一般我们的解决思路就是重新设置画图的字体与编码import matplotlib as mpl mpl.rcParams[u'font... -
matplotlib1、无法显示中文,以及符号问题
2019-09-27 22:26:18转载于:https://www.cnblogs.com/yunshangyue71/p/11535384.html -
python箭头符号怎么打_python – 用箭头标记matplotlib直方图bin
2020-12-05 11:25:00您可以使用注释添加箭头:import pandas as pdimport matplotlib.pyplot as plt#import seaborn as snsimport numpy as npfig,ax = plt.subplots()series = pd.Series(np.random.normal(0,1000))series.plot(kind='... -
python怎么显示符号_[转载]Python Matplotlib中坐标轴标题中文及各种特殊符号的显示...
2020-12-01 00:48:12Matplotlib中文显示问题——用例子说明问题#-*- coding: utf-8 -*-from pylab import *t = arange(-4*pi, 4*pi, 0.01)y = sin(t)/tplt.plot(t, y)plt.title('test')plt.xlabel(u'u2103',fontproperties='SimHei')#在... -
python中中文图标_python中中文图标_matplotlib同时显示中文和特殊符号
2021-03-17 17:26:33Matplotlib中文显示问题——用例子说明问题#-*- coding: utf-8 -*-from pylab import *t = arange(-4*pi, 4*pi, 0.01)y = sin(t)/tplt.plot(t, y)plt.title('test')plt.xlabel(u'\u2103',fontproperties='SimHei')#... -
python中matplotlib 中文乱码与符号问题一劳永逸式解决方案[Mac/Windows通用][个人存档]
2020-03-04 21:45:05matplotlib 初始化时首先要加载一个配置文件,字体设置也在这个配置文件中。之所有无法正常显示中文是因为 这个配置文件中没有加入中文字体,解决的办法是我们需要在这个配置文件中指定一个可用的中文字体。 这个... -
Python可视化|Matplotlib40-LaTeX in Matplotlib和Python
2020-09-24 22:32:13如何在Matplotlib中使用LaTeX 公式和符号、python如何生成LaTeX 数学公式。 -
python画图坐标轴不出现小数_在matplotlib p的轴上显示小数点和科学符号
2020-12-10 09:18:52为了在科学记数法中获得格式良好的标签,可以使用ScalarFormatter的格式...import matplotlib.pyplot as pltimport numpy as npimport matplotlib.ticker as mtickerfig, ax = plt.subplots()x = np.linspace(0, 30...