matplotlib 的使用技巧(局部放大图坐标轴设置边框设置横纵比设置)
Posted ShuiFYC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib 的使用技巧(局部放大图坐标轴设置边框设置横纵比设置)相关的知识,希望对你有一定的参考价值。
文章目录
前言
提示:Matplotlib 使用技巧
局部放大图
设置绘图横纵比
边框改变颜色、隐藏边框
翻转坐标轴、隐藏坐标轴、调整坐标轴显示范围
提示:以下是本篇文章正文内容,下面案例可供参考
使用步骤 提示:功能可相互独立,不必按此目录顺序执行
1.引入库
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
1.1 绘制初始图像
image = sitk.ReadImage('xxx.nii') # <class 'SimpleITK.SimpleITK.Image'> 支持dcm\\nrrd\\nii
image_array = sitk.GetArrayFromImage(image) # z,y,x shape z*512*512
fig, axes = plt.subplots()
axes.imshow(image_array[8,...], cmap='gray')
2.局部放大图(调整坐标轴显示范围、翻转坐标轴、隐藏坐标轴、边框改变颜色、隐藏边框)
2.1 绘制嵌入绘制局部放大图的坐标系
axins = inset_axes(axes, width="50%", height="50%",loc='upper right',
borderpad=0,
bbox_to_anchor=(0, 0, 1, 1),
bbox_transform=axes.transAxes)
inset_axes 参数说明
注意:bbox外的width height是对于bbox里的
axes:父坐标系
axins:子坐标系
width, height:子坐标系的宽度和高度(百分比形式或者浮点数个数)
浮点数:单位英寸
百分比:相对于axes的bbox的比例
loc:子坐标系的位置
'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
borderpad: 在插图坐标空间与bbox_to_anchor之间填充
默认值是0.5 单位是axes的字体尺寸,默认字体尺寸是10points,所以borderpad=0.5等于填充5points
想要x0 y0 与原点对齐,则设置 borderpad=0
bbox_to_anchor:边界框,四元数组(x0, y0, width, height)
bbox_transform:从父坐标系到子坐标系的几何映射
固定坐标系的宽度和高度以及边界框,分别设置loc为左上、左下、右上(默认)、右下和中间,效果图如下:
上图为转载并进行修改:【Matplotlib】 局部放大图
2.2 在子坐标系中绘制原始数据
和父坐标系的画图一致
axins.imshow(image_array[z,:,:])
2.3 调整子坐标系的显示范围 ( 调整坐标轴显示范围)
# 调整子坐标系的显示范围
axins.set_xlim(200, 250)
axins.set_ylim(100, 150)
2.4 建立父坐标系与子坐标系的连接线
# 建立父坐标系与子坐标系的连接线
# loc1 loc2: 坐标系的四个角 1 (右上) 2 (左上) 3(左下) 4(右下)
# facecolor或fc - mpl color spec,默认为None,无颜色为'none'。内部颜色
# edgecolor或ec - mpl颜色规范,默认为None,无颜色为'none'。 外部颜色(可理解为边线)
# lw 线宽
mark_inset(axes, axins, loc1=2, loc2=4, fc="none", ec='r', lw=1)
2.5 父坐标系翻转y坐标轴,为了与子图显示方向一致 (翻转坐标轴)
#翻转y坐标轴
axes.invert_yaxis()
2.6 调整子坐标系边框 (边框颜色、边框隐藏)
# 4个边框 top、left、right、bottom
#设置所有边框颜色为红色
axins.spines[:].set_color('r')
#隐藏右上边框
axins.spines['right'].set_visible(False)
axins.spines['top'].set_visible(False)
2.7 子坐标系隐藏坐标轴(隐藏坐标轴)
注意:axins.set_axis_off()会影响轴线,刻度线,刻度标签,网格和轴标签
#去刻度线和标签
axins.set_xticks([])
axins.set_yticks([])
2.8 局部放大图效果展示
3 设置绘图横纵比
使用 matplotlib.axes.Axes.set_aspect() 函数设置长宽比
如果在函数中使用等于作为长宽比,则得到的图在 X 轴和 Y 轴上从数据点到绘图单位的缩放比例相同
使用以下命令手动设置纵横比:
axes.get_data_ratio() 获取原始绘图数据的比率,倒数的值传递给 set_aspect()。
axes.set_aspect(1.0/(axes.get_data_ratio()), adjustable='box')
4 画图占满整个画图,无白边
w=image_array[z,...].shape[0]
h=image_array[z,...].shape[1]
dpi=100
fig,axes=plt.subplots(figsize=(w/dpi,h/dpi),dpi=dpi)
axes=fig.add_axes([0,0,1,1])
axes.set_axis_off()
axes.imshow()
plt.savefig('./test.png', bbox_inches='tight')
参考资料
【Matplotlib】 局部放大图
如何在 Matplotlib 中绘制等轴的正方形图
Matplotlib绘图(一)-边框线及坐标轴的设置
Matplotlib示例.256 如何绘制画中画效果
matplotlib隐藏刻度线、标签和边线
看回答:python matplotlib savefig的图片如何充满整个画布
实践Origin对图片局部放大
【实践】Origin将原图中一部分局部放大,并和原图在一张图上
- 新建项目只有两列,列数不够通过右键选择Add New Column增加新列。
- 新增的列默认为Y(对应纵坐标),可以选中新增列右键,选择Set As-->X(对应横坐标)。
- 选择要画图的列,右键在Plot中选择图的类型
- 图之间的切换
- 使用工具中的放大镜,按住Ctrl,鼠标选择需要局部放大的部分
- 下图中右边的图即为局部放大图
- 选择局部放大图复制,在原图粘贴即可。再做微调。
- 设置选择区域框样式
以上是关于matplotlib 的使用技巧(局部放大图坐标轴设置边框设置横纵比设置)的主要内容,如果未能解决你的问题,请参考以下文章
python使用matplotlib可视化3D柱状图(3D bar plot三维柱状图包含三个坐标轴xyz)设置zdir参数为x改变3d图观察的角度
Python使用matplotlib可视化柱状图坐标轴标签的符号(-)显示为了方框□□设置rcParams参数配置解决
python使用matplotlib可视化3D柱状图(3D histogram三维柱状图包含三个坐标轴xyz)设置zdir参数为z改变3d图观察的角度