matplot 图在画布中的位置_matplotlib画布与坐标轴(figure and axes)

557962c23c30b86b9105892c0936bc85.png

简介

使用matplotlib绘图,一个非常基础的问题就是要搞清楚画布和坐标轴。只有真正了解这两个概念,才能获得对整个绘图过程的控制权。

画布(Figure)

想要绘图就需要一张画布,所有的内容都是放在画布上面的。通过Figure对象,我们能够创建一张画布。

>>>import matplotlib.pyplot as plt

>>>plt.figure()

>>>plt.show()

1

2

3

4

>>>importmatplotlib.pyplotasplt

>>>plt.figure()

>>>plt.show()

使用

plt.figure() 创建一个Figure对象,通过

plt.show() 显示出来:

d943d7ac11631d18f5f31cfa95099757.png

坐标轴(axes)

有了画布,接下来就需要在这张画布上绘图,因此我们首先需要创建一个坐标轴,可以调用Figure实例的

add_axes 方法:

>>>fig = plt.figure()

>>>ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # [距离左边,下边,坐标轴宽度,坐标轴高度] 范围(0, 1)

>>>plt.show()

1

2

3

>>>fig=plt.figure()

>>>ax=fig.add_axes([0.1,0.1,0.8,0.8])# [距离左边,下边,坐标轴宽度,坐标轴高度] 范围(0, 1)

>>>plt.show()

[0.1,0.1,0.8,0.8] 表示的是在画布中,坐标轴距离画布左边0.1倍的位置,距离下边0.1倍的位置,确定了这两个位置后,坐标轴的整体宽度和高度占0.8倍的大小,换句话说,距离右边和上边0.9(0.1+0.8)倍。得到如下结果:

926e14c447ddd2728333abcfcccca5e7.png

如果你之前就接触过一些绘图的命令,你会发现:

>>>plt.plot([0, 1, 2])

>>>plt.show()

1

2

>>>plt.plot([0,1,2])

>>>plt.show()

直接使用这两个命令就能绘图呀,不需要定义画布和坐标轴,得到如下图:

a2ea35ffb8a4686f745c2b6f6505a365.png

这是因为matplotlib会在最近用过的坐标轴上进行绘图,如果没有的话,默认会创建一个画布和坐标轴。但是显示创建画布和坐标轴的好处是让我们对绘图过程有了完全的控制权(比如可以指定在什么地方绘图),而且绘图的逻辑更强。接下来我们绘制一张图中图来理解这个过程:

>>>import numpy as np

>>>x = np.linspace(0, 10, 10)

>>>y = np.sin(x)

# 创建画布

>>>fig = plt.figure()

# 创建坐标轴

>>>ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # 第一个坐标轴的范围

>>>ax2 = fig.add_axes([0.2, 0.5, 0.4, 0.3]) # 第二个坐标轴的范围

>>>ax1.plot(x, y, 'r')

>>>ax2.plot(x, y, 'g')

>>>plt.show()

1

2

3

4

5

6

7

8

9

10

11

12

13

>>>importnumpyasnp

>>>x=np.linspace(0,10,10)

>>>y=np.sin(x)

# 创建画布

>>>fig=plt.figure()

# 创建坐标轴

>>>ax1=fig.add_axes([0.1,0.1,0.8,0.8])# 第一个坐标轴的范围

>>>ax2=fig.add_axes([0.2,0.5,0.4,0.3])# 第二个坐标轴的范围

>>>ax1.plot(x,y,'r')

>>>ax2.plot(x,y,'g')

>>>plt.show()

得到如下图形:

5a6ffb312db85d104b2ac6d791ba02e6.png

在这里我们创建了两个坐标轴

ax1 和

ax2 ,分别对两个坐标轴指定范围并作图。

图片尺寸大小

在创建 Figure 对象的时候,我们可以使用

figsize 和

dpi 控制图片尺寸。比如:

>>>fig = plt.figure(figsize=(16,8), dpi=100)

1

>>>fig=plt.figure(figsize=(16,8),dpi=100)

figsize 表示画布长宽大小,单位为英寸;

dpi 表示每英寸的像素值。因此上面的命令就创建了一张1600*800像素的画布。

保存图片

从上面输出的结果来看,

plt.show() 并不是输出一张图片,而是一个交互式的绘图界面。如果要保存图片,还需要通过

savefig() 保存。没有显式指定画布和坐标轴,直接使用

plt.savefig() 保存也可以,显式指明了画布可以用Figure实例的方法

fig.savefig() 。matplotlib 可以生成多种格式的高质量图像,包括PNG,JPG,EPS,SVG,PGF 和 PDF。只要写好后缀名:

>>>fig.savefig("result.png")

1

>>>fig.savefig("result.png")

总结

建议按照显式的方法去绘图:先创建画布,再创建坐标轴,最后在坐标轴上绘图。这种代码方式会让绘图逻辑更加清晰,能够随心所欲的修改图片的每个地方。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题我已经了解。以下是回答: 您可以使用Matplotlib来创建三个坐标轴,并绘制一个椭圆、一个正五边形和一个正弦函数曲线。具体步骤如下: 1. 导入必要的库: ```python import matplotlib.pyplot as plt import numpy as np ``` 2. 创建画布和三个坐标轴: ```python fig = plt.figure(figsize=(8, 6)) # 创建8x6的画布 ax1 = fig.add_subplot(131) # 创建第一个坐标轴 ax2 = fig.add_subplot(132) # 创建第二个坐标轴 ax3 = fig.add_subplot(133) # 创建第三个坐标轴 ``` 此时您已经创建了三个坐标轴,但它们还没有任何内容。 3. 绘制椭圆: 我们可以使用Matplotlib的Ellipse方法来绘制椭圆,并将其添加到第一个坐标轴。具体步骤如下: ```python ellipse = plt.Circle(xy=(0.5, 0.5), width=0.5, height=0.3) # 创建椭圆对象 ax1.add_artist(ellipse) # 将椭圆添加到第一个坐标轴 ``` 这里创建了一个长轴为0.5,短轴为0.3的椭圆,椭圆的心点坐标为(0.5, 0.5)。可以根据需要调整这些参数。 4. 绘制正五边形: 正五边形有5个顶点,因此需要定义5个坐标点,即: ```python points = np.array([[0.5, 0.8], [0.7, 0.6], [0.65, 0.4], [0.35, 0.4], [0.3, 0.6], [0.5, 0.8]]) ``` 然后,我们可以使用Matplotlib的Polygon方法来绘制多边形,并将其添加到第二个坐标轴。具体步骤如下: ```python polygon = plt.Polygon(points) ax2.add_artist(polygon) ``` 5. 绘制正弦函数曲线: 我们可以用Numpy库来生成一组坐标点,其横坐标为0到2π之间的一组数,纵坐标为对应的sin函数值。具体步骤如下: ```python x = np.linspace(0, 2*np.pi, 100) # 横坐标为0到2π之间的100个数 y = np.sin(x) # 对应的纵坐标为sin函数值 ``` 然后,我们可以使用Matplotlibplot方法来绘制曲线,并将其添加到第三个坐标轴。具体步骤如下: ```python ax3.plot(x, y) ``` 6. 设置坐标轴: 为了使三个形适当地显示在各自的坐标轴,需要为每个坐标轴设置适当的范围和标签。具体步骤如下: ```python # 第一个坐标轴 ax1.set_xlim([0, 1]) ax1.set_ylim([0, 1]) ax1.set_title('Ellipse') ax1.set_xlabel('X') ax1.set_ylabel('Y') # 第二个坐标轴 ax2.set_xlim([0, 1]) ax2.set_ylim([0, 1]) ax2.set_title('Pentagon') ax2.set_xlabel('X') ax2.set_ylabel('Y') # 第三个坐标轴 ax3.set_xlim([0, 2*np.pi]) ax3.set_ylim([-1, 1]) ax3.set_title('Sine Curve') ax3.set_xlabel('X') ax3.set_ylabel('Y') ``` 这里将第一个坐标轴的范围设置为[0,1],第二个坐标轴的范围也设置成[0,1],第三个坐标轴的范围设置为[0,2π]。同时,为了方便展示,将第三个坐标轴的纵坐标范围设为[-1,1]。还可以为每个坐标轴设置标题和标签。 7. 输出图像和学号信息: 最后,您可以使用plt.suptitle方法将您的学号信息添加到图像上方居。 ```python plt.suptitle('学号:YourStudentID', fontsize=12, fontweight='bold', x=0.5, y=1.05) plt.tight_layout() # 调整各个子之间的空白 plt.show() # 显示图像 ``` 这里将'YourStudentID'替换成您的学号信息即可。 完成上述步骤后,您将获得一个包含三个形和您的学号信息的Matplotlib图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值