一年来终于用实际案例把matplotlib的绘图坐标轴说清楚了-太给力了

一年来终于用实际案例把matplotlib的绘图坐标轴说清楚了-太给力了,第1张

学习如果设计坐标轴的主标和辅标 1、正常显示汉字和负号的代码段
mp.rcParams['font.sans-serif']=['SimHei']
mp.rcParams['axes.unicode_minus']=False
2、调用坐标轴和设置主图代码
# 坐标刻度定位器
mp.figure()
# 调用坐标轴
ax = mp.gca()
3、隐藏top:上,right:右坐标线代码
ax.spines['left'].set_position(('data',0))
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
4、设置最小刻度~最大刻度代码
#以下两段代码为y0~5控制范围,x为0~11控制范围,可以理解为主刻度
mp.xlim(0, 11)
mp.ylim(0,5)
5、设置最小刻度~最大刻度代码
#以下两段代码为y0~5控制范围,x为0~11控制范围,可以理解为主刻度
mp.xlim(0, 11)
mp.ylim(0,5)
6、设置x水平轴主刻度(6-1)~(6-2)分刻度代码
#6-1:设置主刻度,主刻度参数为2时,显示0,2,4....,如果为3呢?
ax.xaxis.set_major_locator(mp.MultipleLocator(3))
#6-2:这里设置的是x轴的分刻度,分刻度参数为0.3,0~3之间被分成10个小格。
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.3))
6、设置y竖直轴分刻度代码
#修改为设置y轴的分刻度代码
ax.yaxis.set_minor_locator(mp.MultipleLocator(0.5))
7、为x水平轴添加辅助的文字说明
mp.text(5, 0.3, '坐标定位-主标和次标的设置原理图', ha='center', size=12)
设计代码分析
import numpy as np
import matplotlib.pyplot as mp

mp.rcParams['font.sans-serif']=['SimHei']
mp.rcParams['axes.unicode_minus']=False
# 坐标刻度定位器
mp.figure()
#以下两段代码为y0~5控制范围,x为0~11控制范围,可以理解为主刻度
mp.xlim(0, 11)
mp.ylim(0,5)
#这里手动把y轴添加上0~5个主刻度,顺便加上文字标签
mp.yticks([0,1,2,3,4,5])
#mp.yticks(['一','二','三','四','五','六'],rotation=30)
# 调用坐标轴
ax = mp.gca()
# 只留底轴,其余颜色设置为透明
ax.spines['left'].set_position(('data',0))
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
# 设置主刻度,主刻度参数为2时,显示0,2,4....,如果为3呢?
ax.xaxis.set_major_locator(mp.MultipleLocator(3))
#这里设置的是x轴的分刻度,分刻度参数为0.3,0~3之间被分成10个小格。
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.3))
#修改为设置y轴的分刻度代码
ax.yaxis.set_minor_locator(mp.MultipleLocator(0.5))

mp.plot(np.arange(11), np.zeros(11), c='none')
# 加一个文字,(ha=为中心对齐)
mp.text(5, 0.3, '坐标定位-主标和次标的设置原理图', ha='center', size=12)
mp.title('学习设置刻度主标和辅标',fontsize=23)
mp.show()

代码扩展练习:

根据前面的代码内容,试卷把坐标添加上箭头吧,下面给出如果添加箭头的代码段
问题思考:
提交的图片中背景是有颜色的,这里是如何实现的呢?
请把对应的代码答案,留言区讨论一下吧!

pd中对坐标轴添加箭头,坐标轴箭头
1 导入模块设置axisartist轴艺术
2 主画板fig,把主画板添加到艺术画板,艺术画板命名ax
3 把这些艺术画板作为子区域添加到主画板fig中。
4 设计指定轴的样式为箭头
5 隐藏不需要的轴,完成基础工作。

import mpl_toolkits.axisartist as axisartist
#定义主画板
fig = mp.figure()
# 定义艺术画板名称为ax,添加子图参数中绑定主画板
ax = axisartist.Subplot(fig,111)
#主画板中添加艺术画板
fig.add_axes(ax)
#实现箭头坐标轴装饰,首先在定义调用坐标轴位置,然后确定轴线_类型,
箭头样式:空->,实-|>
箭头尺寸:size=1.5
ax.axis['bottom'].set_axisline_style('-|>',size=1.5)
ax.axis['left'].set_axisline_style('->',size=1.8)
#艺术画板中隐藏坐标轴
ax.axis["top"].set_visible(False)
ax.axis["right"].set_visible(False)
plt.show()
扩展练习效果图

实际案例:画三角形
import matplotlib.pyplot as mp
import mpl_toolkits.axisartist as axisartist

mp.rcParams['font.sans-serif'] = ['SimHei']
mp.rcParams['axes.unicode_minus'] = False


class Art_axis():

    def axis_arrow():
        # 定位主图容器,把主图容器包装成一个艺术子画板,在主图中调用艺术子画板
        fig = mp.figure()
        ax = axisartist.Subplot(fig, 111)
        fig.add_axes(ax)
        #实现箭头坐标轴装饰, 明确空箭头为 ->,实箭头为 -|>,大小为size
        ax.axis['bottom'].set_axisline_style('-|>',size=1.5)
        ax.axis['left'].set_axisline_style('->',size=1.8)

        # 调用坐标轴
        ax = mp.gca()
        # 只留底轴,其余颜色设置为透明
        ax.spines['left'].set_position(('data',0))
        ax.spines['bottom'].set_position(('data', 0))

        #隐藏右上坐标轴
        ax.axis["top"].set_visible(False)
        ax.axis["right"].set_visible(False)
        return ax
    def scale(ax):
        #设置x轴的坐标范围
        mp.xlim(0, 13)
        # 设置主辅轴,主轴总长为5,单位长为1,最小间隔为0.5
        mp.ylim(0,5)
        ax.yaxis.set_major_locator(mp.MultipleLocator(1))
        ax.yaxis.set_minor_locator(mp.MultipleLocator(0.1))

        mp.title('学习绘制三角形在坐标系内',fontsize=18)

    ax = axis_arrow()
    scale(ax)
    def plot():
        #观察plot内的坐标和图中的坐标点位置,总结plot画三角形的技巧
        mp.plot([1,3],[1,4],'k')
        mp.plot([3, 8], [4, 1],'k:',lw=1.5)
        mp.plot([1,8],[1,1],'k')
        mp.annotate('A({},{})'.format(1, 1), xy=(1, 1), xytext=(0.3, 0.6),
                     fontsize=16)
        mp.annotate('B({},{})'.format(3, 4), xy=(3, 4), xytext=(3.5, 4.1),
                    fontsize=16)
        mp.annotate('C({},{})'.format(8, 1), xy=(8, 1), xytext=(8, 0.6),
                    fontsize=16)


    plot()
    mp.show()

Art_axis()
画三角形效果图


扩展思考:图中的背景颜色是哪行代码实现的呢?聪明的你找到答案后把代码留言交流区讨论一下吧!

自动生成三角形坐标的代码

确定坐标点:

  1. (a_x1,b_y1) A点坐标
  2. (b_x2,b_y2) B点坐标
  3. (c_x1,c_y1) C点坐标
   import random
import matplotlib.pyplot as mp
import mpl_toolkits.axisartist as axisartist

mp.rcParams['font.sans-serif'] = ['SimHei']
mp.rcParams['axes.unicode_minus'] = False


class Art_axis():

    def axis_arrow():
        # 定位主图容器,把主图容器包装成一个艺术子画板,在主图中调用艺术子画板
        fig = mp.figure(figsize=(6,5),dpi=80)
        ax = axisartist.Subplot(fig, 111)
        fig.add_axes(ax)
        #实现箭头坐标轴装饰, 明确空箭头为 ->,实箭头为 -|>,大小为size
        ax.axis['bottom'].set_axisline_style('-|>',size=1.5)
        ax.axis['left'].set_axisline_style('->',size=1.8)

        # 调用坐标轴
        ax = mp.gca()
        # 只留底轴,其余颜色设置为透明
        ax.spines['left'].set_position(('data',0))
        ax.spines['bottom'].set_position(('data', 0))

        #隐藏右上坐标轴
        ax.axis["top"].set_visible(False)
        ax.axis["right"].set_visible(False)
        return ax
    def scale(ax):
        #设置x轴的坐标范围
        mp.xlim(0, 13)
        # 设置主辅轴,主轴总长为5,单位长为1,最小间隔为0.5
        mp.ylim(0,8)
        ax.yaxis.set_major_locator(mp.MultipleLocator(1))
        ax.yaxis.set_minor_locator(mp.MultipleLocator(0.1))

        mp.title('学习绘制三角形在坐标系内',fontsize=18)

    ax = axis_arrow()
    scale(ax)
    def plot():

        a_x1= random.randint(1,10)
        b_x2= random.randint(1,10)
        b_y1= random.randint(4,6)
        b_y2= random.randint(4,6)
        c_x1= random.randint(6,12)
        c_y1= random.randint(1, 6)
        if a_x1==b_y1==c_x1:
            a_x1 += 1
            b_y1 +=2
            c_x1 += 3

        mp.plot([a_x1, b_x2], [b_y1, b_y2], 'k')  
        mp.plot([b_x2, c_x1], [b_y2, c_y1], 'k:', lw=1.5)   
        mp.plot([a_x1, c_x1], [b_y1, c_y1], 'k')  
        mp.annotate('A({},{})'.format(a_x1, b_y1), xy=(a_x1, b_y1), xytext=(a_x1, b_y1),
                    fontsize=16)
        mp.annotate('B({},{})'.format(b_x2, b_y2), xy=(b_x2, b_y2), xytext=(b_x2, b_y2),
                    fontsize=16)
        mp.annotate('C({},{})'.format(c_x1, c_y1), xy=(c_x1, c_y1), xytext=(c_x1, c_y1),
                    fontsize=16)

    plot()
    mp.show()






Art_axis()



效果图展示:

以上代码为类里面构造三角形三个顶点的代码函数,通过随机函数提供的定位好的坐标,来确定我们需要三角形的位置。

学后记:

感悟如下

  1. 本次学习的内容是前一年中,没有完全清楚的部分,但是今天重新拿出来按照正确的学习方式学习,问题迎刃而解了,开心。
  2. 学习有的时候不是一次性可以完全搞清楚的,需要把问题搁置起来,继续我们能够理解和学会的内容,等到有了一些必要的积累后,重新回头看你曾经不会的东西,有一天你会恍然大悟。
  3. 学习过程中遇到的问题,学会处理将来都会变成你的财富,让我们随着学习变的越来越有经验吧!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/719205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存