Matplotlib中RadioButtons实现的原理是什么?

2020-03-25 10:19发布

3条回答
Anonyem
2楼 · 2020-09-18 09:07





1、核心原理讲解

  使用matplotlib绘图的原理,主要就是理解figure(画布)、axes(坐标系)、axis(坐标轴)三者之间的关系。张三的画板matplotlib绘图

2、matplotlib库的安装与导入

1)安装

pipinstallmatplotlib


2)导入相关库

  现在你不需要关注下面代码具体是什么意思,有一个主观印象即可。我将会在以后的文章中,给大家一一介绍你不懂的哪些参数。

importnumpyasnp

importpandasaspd

importmatplotlibasmpl

importmatplotlib.pyplotasplt


#排除警告信息

importwarnings

warnings.filterwarnings("ignore")


#打印版本信息

display(np.__version__)

display(pd.__version__)

display(mpl.__version__)


#matplotlib画图常见参数设置

mpl.rcParams["font.family"]="SimHei"#设置字体

mpl.rcParams["axes.unicode_minus"]=False#用来正常显示负号

plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签


#嵌入式显示图形

%matplotlibinline


结果如下:

3、创建figure(画布)的两种方式

1)绘制一个最简单的折线图

importmatplotlibasmpl

importmatplotlib.pyplotasplt


x=[1,3,5,7]

y=[4,9,6,8]

plt.plot(x,y)

plt.show()


结果如下:结果分析:  在前面的叙述中,我们已经说过,想要使用matplotlib绘图,必须先要创建一个figure(画布)对象,然后还要有axes(坐标系)。但是观察上述代码,我们并没有创建figure对象,那么怎么又可以画图呢?  对于上述疑问,接下来我们就要讲述创建figure(画布)的两种方式。  

2)创建figure(画布)的两种方式

隐式创建显示创建

①隐式创建figure对象

  当第一次执行plt.xxx()这句绘图代码时,系统会去判断是否已经有了figure对象,如果没有,系统会自动创建一个figure对象,并且在这个figure之上,自动创建一个axes坐标系(注意:默认创建一个figure对象,一个axes坐标系)。  也就是说,如果我们不设置figure对象,那么一个figure对象上,只能有一个axes坐标系,即我们只能绘制一个图形。  

②隐式创建figure对象存在的问题

  优势:如果只是绘制一个小图形,那么直接使用plt.xxx()的方式,会自动帮我们创建一个figure对象和一个axes坐标系,这个图形最终就是绘制在这个axes坐标系之上的。  劣势:如果我们想要在一个figure对象上,绘制多个图形,那么我们就必须拿到每个axes对象,然后调用每个位置上的axes对象,就可以在每个对应位置的坐标系上,进行绘图,如下图所示。注意:如果figure对象是被默认创建的,那么我们根本拿不到axes对象。因此,需要我们显示创建figure对象。

③显示创建figure对象:以后的文章会详细讲述布局设置

#手动创建一个figure对象

figure=plt.figure()

#获取每个位置的axes对象

axes1=figure.add_subplot(2,1,1)

axes2=figure.add_subplot(2,1,2)


如图所示:举例说明:

figure=plt.figure()

axes1=figure.add_subplot(2,1,1)

axes2=figure.add_subplot(2,1,2)


axes1.plot([1,3,5,7],[4,9,6,8])

axes2.plot([1,2,4,5],[8,4,6,2])

figure.show()


结果如下:

4、完整的绘图步骤

①导库

importmatplotlibasmpl

importmatplotlib.pyplotasplt


②创建figure画布对象

如果绘制一个简单的小图形,我们可以不设置figure对象,使用默认创建的figure对象,

当然我们也可以显示创建figure对象。

如果一张figure画布上,需要绘制多个图形。那么就必须显示的创建figure对象,然后

得到每个位置上的axes对象,进行对应位置上的图形绘制。


③根据figure对象进行布局设置

1*1

1*2

2*1

2*2

...


④获取对应位置的axes坐标系对象

figure=plt.figure()

axes1=figure.add_subplot(2,1,1)

axes2=figure.add_subplot(2,1,1)


⑤调用axes对象,进行对应位置的图形绘制

这一步,是我们传入数据,进行绘图的一步。对于图形的一些细节设置,都可以在这一步进行。


⑥显示图形

plt.show()或figure.show()

如果在pycharm中绘图的话,必须要加这句代码,才能显示。如果在notebook中进行绘图,

可以不用加这句代码,而是自动显示。


5、绘图技巧(细节设置)

*figure画布

*axes坐标系,一个画布上可以有多个坐标系

*axis坐标轴,一个坐标系中可以有多个坐标轴,一般都是二维平面坐标系,或者三维立体坐标系

*title标题

*legend图例

*grid背景网格

*tick刻度

*axislabel坐标轴名称

*ticklabel刻度名称

*majorticklabel主刻度标签

*minorticklabel副刻度标签

*line线

*style线条样式

*marker点标记

*font字体相关


  通过对matplotlib绘图的原理,有所了解之后,我们需要学习的就是常见的matplotlib绘图技巧,常见的绘图技巧如上所示,这些绘图技巧都能够很好的帮助我们画出更美观、更直观的图形。下一节,我将会讲述matplotlib绘图技巧(千万不要错过)。


卡卡
3楼 · 2020-11-13 11:28





今天我们来介绍一下python的一个可视化工具matplotlib

matplotlib

使用matplotlib的方式有很多,但最通常的是Pylab模式的ipython(-ipython–pylab)

matplotlib的api都位于matplotlib.pyplot中,所以一般的引入方式为:

importmatplotlib.pyplotasplt


Figure、Subplot

Figure

matplitlib的图像必须在Figure中,Figure创建方式如下:

fig=plt.figure()#之后会弹出一个Figure窗口


创建好Figure后,并不能直接绘图,需要使用add_subplot创建一个或多个子图,在子图中绘图,创建方式如下:

ax1=fig.add_subplot(2,2,1)#将figure分为四块,在第一块创建一个子图;返回AxesSubplot对象


之后我们就可以绘制我们的图像了

plt.plot(randn(50).cumsum(),'k--')


Figure和subplot的创建经常使用,所以matplotlib提供了简洁的创建方式:

fig,axes=plt.subplots(2,3)#创建一个新Figure、并返回一个含有已创建subplot对象的Numpy数组

ax=axes[0,1]#引用第一行第二列的subplot对象


该函数的一些参数选项:


调整图像之间的间距

通常情况下,matplotlib会在subplot外围留下一些边距,并在subplot之间留下一些间距。

我们可以利用subplots_adjust()函数来修改间距

subplots_adjust(left=None,bootom=None,right=None,top=None,wspace=None,hspace=None)#该函数是一个顶级函数;wspace、hspace用来控制宽度和高度的百分比,用作subplot之间的间距

plt.subplots_adjust(wspace=0,hspace=0)#设置subplots之间的间距为0


颜色、线型和标记

matplotlib的plot()函数接受一组X和Y坐标,和一个表示颜色和线形的字符串

ax.plot(x,y,'g--')#根据x,y绘制绿色虚线

#ax为一subplot


刻度、标签和图例

设置X轴范围:

plt.xlim()#返回当前X轴的范围

plt.xlim([0,10])#将X轴的范围设为[0,10]

#以上方法都只对当前或最近创建的Subplot起作用


设置标题、轴标签、刻度以及刻度标签

设置标题ax.set_title("Myfirstmatplotlibplot")#设置对应dubplot的标题

设置轴标签ax.set_xlabel()#为对应subplot的x轴设置标签

ax.set_ylabel()

设置刻度设置刻度有两个方法,set_xticks和set_xticklabels,前者告诉maatplotlib将刻度放在对应范围的哪个位置,默认情况下这些刻度就是刻度标签;后者可以将任何其他类型的值作为标签ax.set_xticks([0,1,2,3,4])#将0,1,2,3,4作为x轴刻度标签

ax.set_xticklabels(['one','two','three','four','five'])#将one,two,three,four,five作为x轴刻度标签

ax.set_yticks()

ax.set_xticklabels()


添加图例


图例是标识图表元素的重要工具。


方式一,在添加subplot时传入label参数

fig=plt.figure()

ax=fig.add_subplot(1,1,1)

ax.plot(randn(1000).cumsum(),'k--',label='one')

ax.plot(randn(1000).cumsum(),'k',label='two')

ax.plot(randn(1000).cumsum(),'k.',label='three')

ax.legend(loc='best')#loc指定图例放置的位置,'best'参数标识系统将图例放置到最不碍事的地方



将图标保存到文件

利用plt.savefig可以将当前图表保存到文件

plt.savefig('figpath.png',dpi=400)#将当前图表存储为png文件

#dpi参数指定每英寸点数(分辨率)


Pandas中的绘图函数

从上面的例子中我们可以看出,matplotlib实际上是一个比较低级的画图工具,当我们绘制一张图标时,往往要指定他的多个属性,如图例,标签,标题等。而pandas中的绘图函数大大简化了这个过程。

Series与DataFrame数据都可以通过调用plot函数来绘制图表

Series:s=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))

s.plot()



DataFrame:df=DataFrame(np.random.randn(10,4).cumsum(),columns=['A','B','C','D'],index=np.arange(0,100,10))

#columns参数指定图例名称,index指定x轴标签

#np.random.randn(10,4)共10行4列,产生四条曲线,每条曲线十个数据点

df.plot()



除了matplotlib外,还有许多优秀的画图工具,如chaco、mayavi等

目前对于matplotlib的介绍就是这些,更多的知识可以研究一下pandas官方文档(pandas正在不断地更新中,会提供越来越多的函数),链接如下:

http://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html


灰机带翅膀
4楼 · 2021-08-26 15:14

单选框是图形化界面(GUI)中常见的控件,matplotlib中的单选框属于部件(widgets),单选框具体实现定义为matplotlib.widgets.RadioButtons类,继承关系为:Widget->AxesWidget->RadioButtons。单选框选中事件在内部绑定的是_clicked方法,_clicked方法最终会调用set_active()方法,参数index为被选中复选框的索引,set_active()方法最终调用func(self.labels[index].get_text()),func为on_clicked方法绑定的回调函数。所以回调函数func必须调用1个参数即当前选中的单选框的文本标签,如果在定义回调函数时不定义参数就会报错。


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问