python matplotlibb怎么控制画四个象限的图

实现一个最简单的plot函数调用:
1 import matplotlib.pyplot as plt
3 y=pp.DS.Transac_open
# 设置y轴数据,以数组形式提供
5 x=len(y)
# 设置x轴,以y轴数组长度为宽度
6 x=range(x)
# 以0开始的递增序列作为x轴数据
8 plt.plot(x,y)
只提供x轴,y轴参数,画最简单图形
图形输出结果类似于:
加入新方法:
plt.figure() :自定义画布大小
plt.subplot() :设置画布划分以及图像在画布上输出的位置
import matplotlib.pyplot as plt
y=pp.DS.Transac_open
# 设置y轴数据,以数组形式提供
# 设置x轴,以y轴数组长度为宽度
x=range(x)
# 以0开始的递增序列作为x轴数据
#==============================
plt.figure(figsize=(8,8),dpi=80)
# 画图之前首先设置figure对象,此函数相当于设置一块自定义大小的画布,使得后面的图形输出在这块规定了大小的画布上,其中参数figsize设置画布大小
plt.subplot(221) # 将figure设置的画布大小分成几个部分,参数&221&表示2(row)x2(colu),即将画布分成2x2,两行两列的4块区域,1表示选择图形输出的区域在第一块,图形输出区域参数必须在&行x列&范围
,此处必须在1和2之间选择&&如果参数设置为subplot(111),则表示画布整个输出,不分割成小块区域,图形直接输出在整块画布上
plt.plot(y,xx) # 在2x2画布中第一块区域输出图形
plt.subplot(222)
plt.plot(y,xx)
#在2x2画布中第二块区域输出图形
plt.show()
plt.subplot(223)
#在2x2画布中第三块区域输出图形
plt.plot(y,xx)
plt.subplot(224)
# 在在2x2画布中第四块区域输出图形
plt.plot(y,xx)
#==============================
plt.plot(x,y)
只提供x轴,y轴参数,画最简单图形
输出结果:
加入新方法:
plt.xticks():设置x轴刻度的表现方式
plt.xlim():设置x轴刻度的取值范围
1 import matplotlib.pyplot as plt
2 import numpy as nu
4 y=pp.DS.Transac_open
# 设置y轴数据,以数组形式提供
6 x=len(y)
# 设置x轴,以y轴数组长度为宽度
7 x=range(x)
# 以0开始的递增序列作为x轴数据
9 plt.figure(figsize=(8,8),dpi=80)
# 画图之前首先设置figure对象,此函数相当于设置一块自定义大小的画布,使得后面的图形输出在这块规定了大小的画布上,其中参数figsize设置画布大小
10 plt.subplot(111) # 将figure设置的画布大小分成几个部分,参数&221&表示2(row)x2(colu),即将画布分成2x2,两行两列的4块区域,1表示选择图形输出的区域在第一块,图形输出区域参数必须在&行x列&范围
,此处必须在1和2之间选择&&如果参数设置为subplot(111),则表示画布整个输出,不分割成小块区域,图形直接输出在整块画布上
11 plt.plot(y,x)
12 #================================
13 plt.xlim(0,1000)
设置x轴刻度范围,从0~1000
14 plt.ylim(0,20)
# 设置y轴刻度的范围,从0~20
16 plt.xticks(nu.linspace(0,1000,15,endpoint=True))
# 设置x轴刻度
17 plt.yticks(nu.linspace(0,20,10,endpoint=True))
# 设置y轴刻度
18 #numpy.linspace()方法返回一个等差数列数组,第一个参数表示等差数列的第一个数,第二个参数表示等差数列最后一个数,第三个参数设置组成等差数列的元素个数,endpoint参数设置最后一个数是否包含在该等差数列。数列中相邻元素间的步长值为随机
19 如:nu.linspace(0,1000,15,endpoint=True)表示:第一个元素为0,最后一个数为1000,在这个 范围内,取15个值,构成一个等差数列,步长值随机,且1000包含在该数列中
20 #================================
21 plt.show()
图形输出结果:
&修改plot方法,新加入参数:
plt.plot(y,xx,color='red',linewidth=2.5,linestyle='-') # color参数设置曲线颜色,linewidth设置曲线宽度,linestyle设置曲线风格
输出结果:
阅读(...) 评论()说明:此贴会不定期进行更新!
设置1:图像的大小设置。
如果已经存在figure对象,可以通过以下代码设置尺寸大小:
f.set_figheight(15)
f.set_figwidth(15)
若果通过.sublots()命令来创建新的figure对象, 可以通过设置figsize参数达到目的。
f, axs = plt.subplots(2,2,figsize=(15,15))
设置2:刻度和标注特殊设置
描述如下:在X轴标出一些重要的刻度点,当然实现方式有两种:直接在X轴上标注和通过注释annotate的形式标注在合适的位置。
其中第一种的实现并不是很合适,此处为了学习的目的一并说明下。
先说第一种:
正常X轴标注不会是这样的,为了说明此问题特意标注成这样,如此看来 0.3 和 0.4的标注重叠了,当然了解决重叠的问题可以通过改变figure 的size实现,显然此处并不想这样做。
怎么解决呢,那就在 0.3 和 0.4之间再设置一个刻度,有了空间后不显示即可。
代码如下:
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(3, 3))
ax = fig.add_subplot(1, 1, 1, frameon=False)
ax.set_xlim(-0.015, 1.515)
ax.set_ylim(-0.01, 1.01)
ax.set_xticks([0, 0.3, 0.4, 1.0, 1.5])
#增加0.35处的刻度并不标注文本,然后重新标注0.3和0.4处文本
ax.set_xticklabels([0.0, &&, &&, 1.0, 1.5])
ax.set_xticks([0.35], minor=True)
ax.set_xticklabels([&0.3 0.4&], minor=True)
#上述设置只是增加空间,并不想看到刻度的标注,因此次刻度线不予显示。
for line in ax.xaxis.get_minorticklines():
line.set_visible(False)
ax.grid(True)
plt.show()
最终图像形式如下:
当然最合理的方式是采用注释的形式,比如:
代码如下:
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
# Plot a sinc function
x=np.linspace(-10,10,100)
y=np.sinc(x-delta)
# Mark delta
plt.axvline(delta,ls=&--&,color=&r&)
plt.annotate(r&$\delta$&,xy=(delta+0.2,-0.2),color=&r&,size=15)
plt.plot(x,y)
设置3:增加X轴与Y轴间的间隔,向右移动X轴标注一点点即可
显示效果对比:
两张的图像的差别很明显,代码如下:
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
plot_data=[1.7,1.7,1.7,1.54,1.52]
xdata = range(len(plot_data))
labels = [&2009-June&,&2009-Dec&,&2010-June&,&2010-Dec&,&2011-June&]
ax.plot(xdata,plot_data,&b-&)
ax.set_xticks(range(len(labels)))
ax.set_xticklabels(labels)
ax.set_yticks([1.4,1.6,1.8])
# grow the y axis down by 0.05
ax.set_ylim(1.35, 1.8)
# expand the x axis by 0.5 at two ends
ax.set_xlim(-0.5, len(labels)-0.5)
plt.show()
设置4:移动刻度标注
上图说明需求:
通过设置 来控制标注的左右位置:
for tick in ax2.xaxis.get_majorticklabels():
tick.set_horizontalalignment(&left&)
当然标注文本的上下位置也是可以控制的,比如:
ax2.xaxis.get_majorticklabels()[2].set_y(-.1)
当然控制刻度标注的上下位置也可以用labelpad参数进行设置:
pl.xlabel(&...&, labelpad=20)
ax.xaxis.labelpad = 20
具体设置请查阅官方文档,完整的代码如下:
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import datetime
# my fake data
dates = np.array([datetime.datetime() + datetime.timedelta(days=i) for i in range(365*5)])
data = np.sin(np.arange(365*5)/365.0*2*np.pi - 0.25*np.pi) + np.random.rand(365*5) /3
# creates fig with 2 subplots
fig = plt.figure(figsize=(10.0, 6.0))
ax = plt.subplot2grid((2,1), (0, 0))
ax2 = plt.subplot2grid((2,1), (1, 0))
## plot dates
ax2.plot_date( dates, data )
# rotates labels
plt.setp( ax2.xaxis.get_majorticklabels(), rotation=-45 )
# shift labels to the right
for tick in ax2.xaxis.get_majorticklabels():
tick.set_horizontalalignment(&right&)
plt.tight_layout()
plt.show()
设置5:调整图像边缘及图像间的空白间隔
图像外部边缘的调整可以使用plt.tight_layout()进行自动控制,此方法不能够很好的控制图像间的间隔。
如果想同时控制图像外侧边缘以及图像间的空白区域,使用命令:
plt.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8,hspace=0.2, wspace=0.3)
设置6:子图像统一标题设置。
效果如下(subplot row i):
思路其实创建整个的子图像,然后将图像的刻度、标注等部分作不显示设置,仅仅显示图像的 title。
代码如下:
import matplotlib.pyplot as plt
fig, big_axes = plt.subplots(figsize=(15.0, 15.0) , nrows=3, ncols=1, sharey=True)
for row, big_ax in enumerate(big_axes, start=1):
big_ax.set_title(&Subplot row %s \n& % row, fontsize=16)
# Turn off axis lines and ticks of the big subplot
# obs alpha is 0 in RGBA string!
big_ax.tick_params(labelcolor=(0,0,0,0), top='off', bottom='off', left='off', right='off')
# removes the white frame
big_ax._frameon = False
for i in range(1,10):
ax = fig.add_subplot(3,3,i)
ax.set_title('Plot title ' + str(i))
fig.set_facecolor('w')
plt.tight_layout()
plt.show()
设置7:图像中标记线和区域的绘制
效果如下:
代码如下:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(-1, 2, .01)
s = np.sin(2*np.pi*t)
plt.plot(t, s)
# draw a thick red hline at y=0 that spans the xrange
l = plt.axhline(linewidth=4, color='r')
# draw a default hline at y=1 that spans the xrange
l = plt.axhline(y=1)
# draw a default vline at x=1 that spans the yrange
l = plt.axvline(x=1)
# draw a thick blue vline at x=0 that spans the upper quadrant of
# the yrange
l = plt.axvline(x=0, ymin=0.75, linewidth=4, color='b')
# draw a default hline at y=.5 that spans the middle half of
# the axes
l = plt.axhline(y=.5, xmin=0.25, xmax=0.75)
p = plt.axhspan(0.25, 0.75, facecolor='0.5', alpha=0.5)
p = plt.axvspan(1.25, 1.55, facecolor='g', alpha=0.5)
plt.axis([-1, 2, -1, 2])
plt.show()
阅读(...) 评论()matplotlib的基本用法(十三)——figure绘制多图 - 简书
matplotlib的基本用法(十三)——figure绘制多图
文章作者:Tyan博客:
本文主要使用matplotlib进行多图的绘制。
import matplotlib.pyplot as plt
# 定义figure
plt.figure()
# figure分成3行3列, 取得第一个子图的句柄, 第一个子图跨度为1行3列, 起点是表格(0, 0)
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan = 3, rowspan = 1)
ax1.plot([0, 1], [0, 1])
ax1.set_title('Test')
# figure分成3行3列, 取得第二个子图的句柄, 第二个子图跨度为1行3列, 起点是表格(1, 0)
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan = 2, rowspan = 1)
ax2.plot([0, 1], [0, 1])
# figure分成3行3列, 取得第三个子图的句柄, 第三个子图跨度为1行1列, 起点是表格(1, 2)
ax3 = plt.subplot2grid((3, 3), (1, 2), colspan = 1, rowspan = 1)
ax3.plot([0, 1], [0, 1])
# figure分成3行3列, 取得第四个子图的句柄, 第四个子图跨度为1行3列, 起点是表格(2, 0)
ax4 = plt.subplot2grid((3, 3), (2, 0), colspan = 3, rowspan = 1)
ax4.plot([0, 1], [0, 1])
plt.show()
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
# 定义figure
plt.figure()
# 分隔figure
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, 0:2])
ax3 = plt.subplot(gs[1, 2])
ax4 = plt.subplot(gs[2, :])
# 绘制图像
ax1.plot([0, 1], [0, 1])
ax1.set_title('Test')
ax2.plot([0, 1], [0, 1])
ax3.plot([0, 1], [0, 1])
ax4.plot([0, 1], [0, 1])
plt.show()
import matplotlib.pyplot as plt
# 划分figure
fig, ((ax11, ax12), (ax21, ax22)) = plt.subplots(2, 2, sharex = True, sharey = True)
# 绘制图像
ax11.scatter([0, 0.5], [0, 1])
ax12.scatter([0, 1], [0, 1])
ax21.scatter([0, 1], [0, -1])
ax22.scatter([0, -1], [0, 1])
plt.show()
勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。
个人博客:
CSDN博客:http://blog.csdn.net/quincuntial

我要回帖

更多关于 matplotlib subplot 的文章

 

随机推荐