matplotlib坐标轴标注画图时怎么调整坐标轴的粗细

Python matplotlib高级绘图详解
前面我们介绍了使用matplotlib简单的绘图方法(见: )
但是想要完全控制你的图形,以及更高级的用法,就需要使用 pyplot 的接口显式的创建图形figure。
本文介绍plyplot控制绘图的一些方法。
2. Pyplot绘图结构
matplotlib API包含有三层:
backend_bases.FigureCanvas : 图表的绘制领域
backend_bases.Renderer : 知道如何在FigureCanvas上如何绘图
artist.Artist : 知道如何使用Renderer在FigureCanvas上绘图
FigureCanvas和Renderer需要处理底层的绘图操作,例如使用wxPython在界面上绘图,或者使用PostScript绘制PDF。Artist则处理所有的高层结构,例如处理图表、文字和曲线等的绘制和布局。通常我们只和Artist打交道,而不需要关心底层的绘制细节。
Artists分为简单类型和容器类型两种。简单类型的Artists为标准的绘图元件,例如Line2D、 Rectangle、 Text、AxesImage 等等。而容器类型则可以包含许多简单类型的Artists,使它们组织成一个整体,例如Axis、 Axes、Figure等。
Figure代表一个绘制面板,其中可以包涵多个Axes(即多个图表)。
fig = plt.figure()
# an empty figure with no axes
ax = fig.add_axes([0.15, 0.1, 0.7, 0.3])
#或者采用一下方式
fig, ax_lst = plt.subplots(2, 2)
# a figure with a 2x2 grid of Axes
Axes表示一个图表
一个Axes包涵:titlek, xaxis, yaxis
3. Artist的属性
下面是Artist对象都具有的一些属性:
alpha : 透明度,值在0到1之间,0为完全透明,1为完全不透明
animated : 布尔值,在绘制动画效果时使用
axes : 此Artist对象所在的Axes对象,可能为None
clip_box : 对象的裁剪框
clip_on : 是否裁剪
clip_path : 裁剪的路径
contains : 判断指定点是否在对象上的函数
figure : 所在的Figure对象,可能为None
label : 文本标签
picker : 控制Artist对象选取
transform : 控制偏移旋转
visible : 是否可见
zorder : 控制绘图顺序
Artist对象的所有属性都通过相应的 get_* 和 set_* 函数进行读写
fig.set_alpha(0.5*fig.get_alpha())
如果你想用一条语句设置多个属性的话,可以使用set函数:
fig.set(alpha=0.5, zorder=2)
使用 matplotlib.pyplot.getp 函数可以方便地输出Artist对象的所有属性名和值。
&&& plt.getp(fig.patch)
alpha = 1.0
animated = False
antialiased or aa = True
如前所述,Figure是最大的一个Aritist,它包括整幅图像的所有元素,背景是一个Rectangle对象,用Figure.patch属性表示。
通过调用add_subplot或者add_axes方法往图表中添加Axes(子图)。
PS:这两个方法返回值类型不同
&&& fig = plt.figure()
&&& ax1 = fig.add_subplot(211)
&&& ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.3])
&matplotlib.axes.AxesSubplot object at 0x056BCA90&
&matplotlib.axes.Axes object at 0x056BC910&
&&& fig.axes
[&matplotlib.axes.AxesSubplot object at 0x056BCA90&,
&matplotlib.axes.Axes object at 0x056BC910&]
为了支持pylab中的gca()等函数,Figure对象内部保存有当前轴的信息,因此不建议直接对Figure.axes属性进行列表操作,而应该使用add_subplot, add_axes, delaxes等方法进行添加和删除操作。
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.45, 0.8, 0.5])
ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.2])
plt.show()
Figure对象可以拥有自己的文字、线条以及图像等简单类型的Artist。缺省的坐标系统为像素点,但是可以通过设置Artist对象的transform属性修改坐标系的转换方式。最常用的Figure对象的坐标系是以左下角为坐标原点(0,0),右上角为坐标(1,1)。下面的程序创建并添加两条直线到fig中:
&&& from matplotlib.lines import Line2D
&&& fig = plt.figure()
&&& line1 = Line2D([0,1],[0,1], transform=fig.transFigure, figure=fig, color="r")
&&& line2 = Line2D([0,1],[1,0], transform=fig.transFigure, figure=fig, color="g")
&&& fig.lines.extend([line1, line2])
&&& fig.show()
在Figure对象中手工绘制直线
注意为了让所创建的Line2D对象使用fig的坐标,我们将fig.TransFigure赋给Line2D对象的transform属性;为了让Line2D对象知道它是在fig对象中,我们还设置其figure属性为fig;最后还需要将创建的两个Line2D对象添加到fig.lines属性中去。
Figure对象有如下属性包含其它的Artist对象:
axes : Axes对象列表
patch : 作为背景的Rectangle对象
images : FigureImage对象列表,用来显示图片
legends : Legend对象列表
lines : Line2D对象列表
patches : patch对象列表
texts : Text对象列表,用来显示文字
Axes容器是整个matplotlib库的核心,它包含了组成图表的众多Artist对象,并且有许多方法函数帮助我们创建、修改这些对象。和Figure一样,它有一个patch属性作为背景,
当它是笛卡尔坐标时,patch属性是一个Rectangle对象;
当它是极坐标时,patch属性则是Circle对象。
当你调用Axes的绘图方法(例如plot),它将创建一组Line2D对象,并将所有的关键字参数传递给这些Line2D对象,并将它们添加进Axes.lines属性中,最后返回所创建的Line2D对象列表:
x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 3.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)
ax1.patch.set_facecolor("green")
ax1.grid(True)
line1 = ax1.plot(x1, y1, 'yo-', label="Test1")
print type(line1)
print line1
line2 = ax2.plot(x2, y2, 'r.-', label='Test2')
&type 'list'&
[&matplotlib.lines.Line2D object at 0x7fa3ac96e8d0&]
plot返回的是一个Line2D对象的列表,因为我们可以传递多组X,Y轴的数据,一次绘制多条曲线。
与plot方法类似,绘制直方图的方法bar和绘制柱状统计图的方法hist将创建一个Patch对象的列表,每个元素实际上都是Patch的子类Rectangle,并且将所创建的Patch对象都添加进Axes.patches属性中:
&&& ax = fig.add_subplot(111)
&&& n, bins, rects = ax.hist(np.random.randn(1000), 50, facecolor="blue")
&a list of 50 Patch objects&
&&& rects[0]
&matplotlib.patches.Rectangle object at 0x05BC2350&
&&& ax.patches[0]
&matplotlib.patches.Rectangle object at 0x05BC2350&
一般我们不会直接对Axes.lines或者Axes.patches属性进行操作,而是调用add_line或者add_patch等方法,这些方法帮助我们完成许多属性设置工作:
&&& fig = plt.figure()
&&& ax = fig.add_subplot(111)
&&& rect = matplotlib.patches.Rectangle((1,1), width=5, height=12)
&&& print rect.get_axes()
&&& rect.get_transform()
BboxTransformTo(Bbox(array([[
&&& ax.add_patch(rect)
&matplotlib.patches.Rectangle object at 0x05C34E50&
&&& rect.get_axes()
&matplotlib.axes.AxesSubplot object at 0x05C09CB0&
&&& rect.get_transform()
&&& ax.transData
&&& ax.get_xlim()
(0.0, 1.0)
&&& ax.dataLim._get_bounds()
(1.0, 1.0, 5.0, 12.0)
&&& ax.autoscale_view()
&&& ax.get_xlim()
(1.0, 6.0)
&&& plt.show()
通过上面的例子我们可以看出,add_patch方法帮助我们设置了rect的axes和transform属性。
下面详细列出Axes包含各种Artist对象的属性:
artists : Artist对象列表
patch : 作为Axes背景的Patch对象,可以是Rectangle或者Circle
collections : Collection对象列表
images : AxesImage对象列表
legends : Legend对象列表
lines : Line2D对象列表
patches : Patch对象列表
texts : Text对象列表
xaxis : XAxis对象
yaxis : YAxis对象
下面列出Axes的创建Artist对象的方法:
Axes的方法
所创建的对象
添加进的列表
Line2D, Rectangle
lines,patches
PolygonCollection
Collections
Axis容器包括坐标轴上的刻度线、刻度文本、坐标网格以及坐标轴标题等内容。刻度包括主刻度和副刻度,分别通过Axis.get_major_ticks和Axis.get_minor_ticks方法获得。每个刻度线都是一个XTick或者YTick对象,它包括实际的刻度线和刻度文本。为了方便访问刻度线和文本,Axis对象提供了get_ticklabels和get_ticklines方法分别直接获得刻度线和刻度文本
&&& axis.get_ticklocs()
array([ 1. ,
&&& axis.get_ticklabels()
&a list of 5 Text major ticklabel objects&
&&& [x.get_text() for x in axis.get_ticklabels()]
[u'1.0', u'1.5', u'2.0', u'2.5', u'3.0']
&&& axis.get_ticklines()
&a list of 10 Line2D ticklines objects&
&&& axis.get_ticklines(minor=True)
&a list of 0 Line2D ticklines objects&
7. 参考文献:
[1] matplotlib doc
[2] 用Python做科学计算
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?使用matplotlib的示例:调整字体-设置刻度、坐标、colormap和colorbar等 - CSDN博客
使用matplotlib的示例:调整字体-设置刻度、坐标、colormap和colorbar等
使用matplotlib的示例:调整字体-设置刻度、坐标、colormap和colorbar等
# -*- coding: utf-8 -*-
#**********************************************************
import numpy as np
import wlab #pip install wlab
import matplotlib
import matplotlib.cm as cm
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
from scipy.interpolate import griddata
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
#**********************************************************
FreqPLUS=['F06925','F10650','F23800','F18700','F36500','F89000']
FindPath='/d3/MWRT/R/'
#**********************************************************
fig = plt.figure(figsize=(8,6), dpi=72, facecolor=&white&)
axes = plt.subplot(111)
axes.cla()#清空坐标轴内的所有内容
#指定图形的字体
font = {'family' : 'serif',
: 'darkred',
'weight' : 'normal',
#**********************************************************
# 查找目录总文件名中保护F06925,EMS和txt字符的文件
for fp in FreqPLUS:
FlagStr=[fp,'EMS','txt']
FileList=wlab.GetFileList(FindPath,FlagStr)
LST=[]#地表温度
EMS=[]#地表发射率
TBH=[]#水平极化亮温
TBV=[]#垂直极化亮温
for fn in FileList:
findex=findex+1
if (os.path.isfile(fn)):
print(str(findex)+'--&'+fn)
#fn='/d3/MWRT/R925_EMS60.txt'
data=wlab.dlmread(fn)
EMS=EMS+list(data[:,1])#地表发射率
LST=LST+list(data[:,2])#温度
TBH=TBH+list(data[:,8])#水平亮温
TBV=TBV+list(data[:,9])#垂直亮温
#-----------------------------------------------------------
#生成格点数据,利用griddata插值
grid_x, grid_y = np.mgrid[275:315:1, 0.60:0.95:0.01]
grid_z = griddata((LST,EMS), TBH, (grid_x, grid_y), method='cubic')
#将横纵坐标都映射到(0,1)的范围内
extent=(0,1,0,1)
#指定colormap
cmap = matplotlib.cm.jet
#设定每个图的colormap和colorbar所表示范围是一样的,即归一化
norm = matplotlib.colors.Normalize(vmin=160, vmax=300)
#显示图形,此处没有使用contourf #&&&ctf=plt.contourf(grid_x,grid_y,grid_z)
gci=plt.imshow(grid_z.T, extent=extent, origin='lower',cmap=cmap, norm=norm)
#配置一下坐标刻度等
ax=plt.gca()
ax.set_xticks(np.linspace(0,1,9))
ax.set_xticklabels( ('275', '280', '285', '290', '295',
'310', '315'))
ax.set_yticks(np.linspace(0,1,8))
ax.set_yticklabels( ('0.60', '0.65', '0.70', '0.75', '0.80','0.85','0.90','0.95'))
#显示colorbar
cbar = plt.colorbar(gci)
cbar.set_label('$T_B(K)$',fontdict=font)
cbar.set_ticks(np.linspace(160,300,8))
cbar.set_ticklabels( ('160', '180', '200', '220', '240',
#设置label
ax.set_ylabel('Land Surface Emissivity',fontdict=font)
ax.set_xlabel('Land Surface Temperature(K)',fontdict=font) #陆地地表温度LST
#设置title
titleStr='$T_B$ for Freq = '+str(float(fp[1:-1])*0.01)+'GHz'
plt.title(titleStr)
figname=fp+'.png'
plt.savefig(figname)
plt.clf()#清除图形
#plt.show()
print('ALL -& Finished OK')
上面的例子中,每个保存的图,都是用同样的colormap,并且每个图的颜色映射值都是一样的,也就是说第一个图中如果200表示蓝色,那么其他图中的200也表示蓝色。
示例的图形如下:
本文已收录于以下专栏:
相关文章推荐
总结Matplotlib绘图如何设置坐标轴刻度大小和刻度。
from pylab import *
from matplotlib.ticker import MultipleLocat...
#!/usr/bin/env python#-*- coding: utf-8 -*- #---------------------------------------------------#演示M...
&&& import numpy as np
&&& import matplotlib.pyplot as plt
&&& x=np.arange(-5,5,0.01)
&&& y=x**3
matplotlib的基本用法(三)——调整坐标轴
在使用matplotlib模块时画坐标图时,往往需要对坐标轴设置很多参数,这些参数包括横纵坐标轴范围、坐标轴刻度大小、坐标轴名称等
在matplotlib中包含了很多函数,用来对这些参数进行设置。p...
使用matplotlib的示例:调整字体-设置刻度、坐标、colormap和colorbar等
[python] view
plain copy
python设置scatter颜色渐变
import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
#! usr/bin/python
#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
data=np.random....
matplotlib上的源代码链接
'''
Make a colorbar as a separate figure.
'''from matplotlib import pyplot
这里直接用代码片段说明一下如何设置刻度、图例和坐标标签字体大小。import matplotlib.pyplot as plt# 代码中的“...”代表省略的其他参数
ax = plt.subplot...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)查看: 37218|回复: 125|关注: 0
matlab figure坐标轴如何加粗
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
MATLAB画出的图,坐标轴如何加粗
[ 本帖最后由 edifiers2008 于
21:13 编辑 ]
<h1 style="color:# 麦片财富积分
关注者: 2
嘿嘿...这个问题是不是很简单哦?
y=5*x.^2+x;
subplot(1,2,1);plot(x,y,'r');
subplot(1,2,2);plot(x,y);
set(gca,'linewidth',5);
<h1 style="color:# 麦片财富积分
‘linewidth’属性,记住了。
<h1 style="color:# 麦片财富积分
关注者: 1
原帖由 yaping321 于
15:27 发表
嘿嘿...这个问题是不是很简单哦?
y=5*x.^2+x;
subplot(1,2,1);plot(x,y,'r');
subplot(1,2,2);plot(x,y);
set(gca,'linewidth',5);
请问yaping321,set(gca,'linewidth',5)中的gca何意?thx.
<h1 style="color:#0 麦片财富积分
关注者: 53
原帖由 mathjiang 于
21:00 发表
请问yaping321,set(gca,'linewidth',5)中的gca何意?thx.
1 提问请直接在论坛中发帖,不要发站内消息给我。
2 不要在QQ中问我提问,这样很浪费时间
<h1 style="color:# 麦片财富积分
gca就是get current axes,最近处理过的句柄,说白了就是最近处理过的轴。类似的还有gcf,get current figure
<h1 style="color:# 麦片财富积分
回复 2# yaping321 的帖子
高手啊!我要学习!
<h1 style="color:# 麦片财富积分
原来是这样!受教了!
<h1 style="color:# 麦片财富积分
我是新手帮不上忙
<h1 style="color:# 麦片财富积分
subplot(1,2,1);plot(x,y,'r');
是什么呢?
站长推荐 /2
机器视觉和人工智能在医疗设备中的应用及实现
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区

我要回帖

更多关于 matplotlib 双坐标轴 的文章

 

随机推荐