3.Matplotlib配置图例与颜色条 您所在的位置:网站首页 手写的颜色怎么设置出来 3.Matplotlib配置图例与颜色条

3.Matplotlib配置图例与颜色条

2024-07-08 02:17| 来源: 网络整理| 查看: 265

文章目录 Matplotlib配置图例与颜色条配置图例默认情况下的图例图例外观设定指定loc参数设定图例位置指定frameon参数来设定边框指定ncol参数来设定标签列数指定圆角边框,增加边框阴影与改变边框透明度 选择图例现实的元素为plt.legend()传入需要显示的线条为需要显示的线设置label参数 在图例中显示不同尺寸的点同时显示多个图例 配置颜色条默认情况下的颜色条配置颜色条的配色方案所有的配色方案确定需要的配色方案 配置颜色条的范围配置离散的颜色条

Matplotlib配置图例与颜色条

前面讲解过,如何给图像增加图例,可以统一给plt.legend()传入名称数组,也可以在每个图线中指定label属性

但是这两种方式都仅仅是简单的为图片添加图例,我们这一节将讲解如何对图例进行高级别的配置

颜色条也是同样,之前只是显示出颜色条,这一节将会讲解如何对颜色条进行配置

配置图例 默认情况下的图例

我们首先创建一个最简单的图例

x=np.linspace(start=-np.pi,stop=np.pi,num=300) plt.style.use('classic') Fig,Axes=plt.subplots(1) Axes.plot(x,np.sin(x),'-b',label='Sine') Axes.plot(x,np.cos(x),'--r',label='Cosine') Axes.axis('equal') Axes.legend() plt.show()

在这里插入图片描述

可以看到,默认情况下图例是添加在图像的右上角

图例外观设定 指定loc参数设定图例位置

我们可以指定loc参数来设置图例的位置

x=np.linspace(start=-np.pi,stop=np.pi,num=300) plt.style.use('classic') Fig,Axes=plt.subplots(1) Axes.plot(x,np.sin(x),'-b',label='Sine') Axes.plot(x,np.cos(x),'--r',label='Cosine') Axes.axis('equal') Axes.legend(loc='upper left') plt.show()

在这里插入图片描述

指定frameon参数来设定边框

默认情况下图例的边框是开启的,我们可以指定frameon参数来取消边框

x=np.linspace(start=-np.pi,stop=np.pi,num=300) plt.style.use('classic') Fig,Axes=plt.subplots(1) Axes.plot(x,np.sin(x),'-b',label='Sine') Axes.plot(x,np.cos(x),'--r',label='Cosine') Axes.axis('equal') Axes.legend(loc='lower center',frameon=False) plt.show()

在这里插入图片描述

指定ncol参数来设定标签列数

我们可以使用ncol参数来设定标签的列数

x=np.linspace(start=-np.pi,stop=np.pi,num=300) plt.style.use('classic') Fig,Axes=plt.subplots(1) Axes.plot(x,np.sin(x),'-b',label='Sine') Axes.plot(x,np.cos(x),'--r',label='Cosine') Axes.axis('equal') Axes.legend(loc='lower center',frameon=False,ncol=2) plt.show()

在这里插入图片描述

指定圆角边框,增加边框阴影与改变边框透明度

我们分别可以指定fancybox来指定圆角边框,设定shadow参数为True添加阴影,设定framealpha来设定边框透明度,设定borderpad来设定文字举例边框距离

x=np.linspace(start=-np.pi,stop=np.pi,num=300) plt.style.use('seaborn') Fig,Axes=plt.subplots(1) Axes.plot(x,np.sin(x),'-b',label='Sine') Axes.plot(x,np.cos(x),'--r',label='Cosine') Axes.axis('equal') Axes.legend(loc='upper center',frameon=True,ncol=2,framealpha=1,fancybox=True,shadow=True,borderpad=1) plt.show()

在这里插入图片描述

选择图例现实的元素

在默认状态下,图例会显示所有元素的标签,如果我们不想显示其中的全部,我们可以通过一些图形命令来指定显示图例中哪些元素和标签

我们有两种方法来指定图例将会显示的元素,第一种是将需要显示的线条传入plt.legend,第二种是为需要显示图例的线条设置label参数

为plt.legend()传入需要显示的线条

我们为plt.plot()可以传入一个多维数组和一维数组,这样plt.plot会自动的以一维数组作为x坐标值,多维数组的每列作为y坐标值进行绘图

而且plt.plot()实际上在绘完图线之后会返回元素为plt.Line2D对象的列表

x=np.linspace(start=-np.pi,stop=np.pi,num=300) plot=plt.plot(x,np.sin(x)) print(type(plot[0])) >>>

所以我们实际上对线条的样式不仅可以通过plt.plot()在绘图时候指定,其实也可以调用plt.Line2D对象的方法来进行修改

不过这里只讲解显示指定的元素.所以我们实际上可以绘制多条线,得到一个包含所有线的plt.Line2D对象的列表,接下来将需要显示图例的线条传入plt.legend即可

x=np.linspace(start=-np.pi,stop=np.pi,num=300) y=np.sin(x[:,np.newaxis]+np.pi*np.arange(start=0,stop=2,step=0.5)) #注意这里发生了广播所以y是一个高维数组 lines=plt.plot(x,y) plt.legend(lines[:2],['first','second']) plt.show()

在这里插入图片描述

这里我们一共生成了四条线,表现在图像上依次向左平移(左加右减),我们为前两条线,分别是蓝线和蓝线向左平移一个单位得到的橙线添加图例

为需要显示的线设置label参数 plt.plot(x,y[:,2],label='Third') plt.plot(x,y[:,3],label='Forth') plt.legend() plt.show()

在这里插入图片描述

在图例中显示不同尺寸的点

下面我们将以加利福尼亚州所有城市的数据(提取码666)为例来绘图,最终效果是将绘制出各个城市的位置,同时以城市面积大小来使用不同大小的圆表示

cities=pd.read_csv('california_cities.csv') latitude,longitude=cities['latd'],cities['longd'] population,area=cities['population_total'],cities['area_total_km2'] plt.scatter(latitude,longitude,label=None,c=np.log10(population),cmap='viridis',s=area,linewidths=0,alpha=0.5) plt.axis(aspect='euqal')a plt.xlabel('Logitude') plt.ylabel('Latitude') plt.colorbar(label='log_{10}$(population)') plt.clim(3,7) for area in [100,300,500]: plt.scatter([],[],c='k',alpha=0.3,s=area,label=str(area)+' km$^2$') plt.legend(scatterpoints=1,frameon=False,labelspacing=1,title='City Area') plt.title('California Cities : Area and Population') plt.show()

在这里插入图片描述

注意,这里我们实际上一共使用了四次plt.scatter()函数,其中只有第一次实际上绘制了图片里的所有的点,而剩下的三个plt.scatter()函数实际上都是在循环中使用的.后面的三次plt.scatter()函数实际上都没有绘图,而是用于添加图例

label参数实际上会以当前绘制图像中的点为例,然后附加上我们给label参数的说明.而前面的列表只是告诉Matplotlib我们该在哪些地方画点,所以即便我们传入两个空列表(表示不再任何地方画点),也不会影响我们图例中的图像的显示

也正是因为label会以图像中的点为例,因此我们只要控制点的大小和颜色就能分别绘制图例中的三个元素

所以根据以上讲解,我们可以这样创建一个图例

La=1 for color in list('cmyk'): plt.scatter([],[],c=color,s=100,label=La) La+=1 plt.legend(frameon=False) plt.show()

在这里插入图片描述

同时显示多个图例

有的时候,由于排版问题,我们可能需要在同一张图像上显示多个图例.但是用Matplotlib来解决这个问题其实并不容易,因为标准的legend接口只支持为一张图像创建一个图例.如果我们使用legend接口再创建第二个,那么第一个图例就会被覆盖

Matplotlib中我们解决这个问题就是创建一个图例艺术家对象,然后调用底层的ax.add_artist()方法来为图片添加第二个图例

Fig,Axes=plt.subplots(1) lines=[] style=['-','--','-.',':'] x=np.linspace(start=-np.pi,stop=np.pi,num=500) for i in range(4): lines+= Axes.plot(x,np.sin(x-i*np.pi/2),style[i],color='black') Axes.axis('equal') Axes.legend(lines[:2],['Line A','Line B'],loc='uppper right',frameon=False) from matplotlib.legend import Legend Leg=Legend(Axes,lines[2:],['Line C','Line D'],loc='lower right',frameon=False) Axes.add_artist(Leg) plt.show()

在这里插入图片描述

这里第12行,我们首先使用正常的方法创建了第一个图例,接下来我们从matplotlib的legend库中导入了Legend对象,我们实例化一个Legend对象之后,调用Axes对象的add_artist底层方法来添加图例

配置颜色条

图例是通过离散的标签值来表示离散的图形元素的含义的对象.但是对于由色彩来表示不同含义的点,线,面构成的连续坐标或图像,用颜色条来表示的效果比较好.

在Matplotlib中,颜色条是一个独立的坐标轴,可以用以指明图形中颜色的含义

默认情况下的颜色条

我们直接使用plt.colorbar()调出的就是默认情况下的颜色条

x=np.linspace(start=0,stop=10,num=1000) Z=np.sin(x)*np.cos(x[:,np.newaxis]) plt.imshow(Z) plt.colorbar() plt.show()

在这里插入图片描述

配置颜色条的配色方案

配置颜色条的配色方案,实际上就是对图像的颜色进行配置,即指定绘图函数中的cmap参数来指定颜色条的配色方案

所有的配色方案

所有的配色方案如下

‘Accent’, ‘Accent_r’, ‘Blues’, ‘Blues_r’, ‘BrBG’, ‘BrBG_r’, ‘BuGn’, ‘BuGn_r’, ‘BuPu’, ‘BuPu_r’, ‘CMRmap’, ‘CMRmap_r’, ‘Dark2’, ‘Dark2_r’, ‘GnBu’, ‘GnBu_r’, ‘Greens’, ‘Greens_r’, ‘Greys’, ‘Greys_r’, ‘OrRd’, ‘OrRd_r’, ‘Oranges’, ‘Oranges_r’, ‘PRGn’, ‘PRGn_r’, ‘Paired’, ‘Paired_r’, ‘Pastel1’, ‘Pastel1_r’, ‘Pastel2’, ‘Pastel2_r’, ‘PiYG’, ‘PiYG_r’, ‘PuBu’, ‘PuBuGn’, ‘PuBuGn_r’, ‘PuBu_r’, ‘PuOr’, ‘PuOr_r’, ‘PuRd’, ‘PuRd_r’, ‘Purples’, ‘Purples_r’, ‘RdBu’, ‘RdBu_r’, ‘RdGy’, ‘RdGy_r’, ‘RdPu’, ‘RdPu_r’, ‘RdYlBu’, ‘RdYlBu_r’, ‘RdYlGn’, ‘RdYlGn_r’, ‘Reds’, ‘Reds_r’, ‘Set1’, ‘Set1_r’, ‘Set2’, ‘Set2_r’, ‘Set3’, ‘Set3_r’, ‘Spectral’, ‘Spectral_r’, ‘Wistia’, ‘Wistia_r’, ‘YlGn’, ‘YlGnBu’, ‘YlGnBu_r’, ‘YlGn_r’, ‘YlOrBr’, ‘YlOrBr_r’, ‘YlOrRd’, ‘YlOrRd_r’, ‘afmhot’, ‘afmhot_r’, ‘autumn’, ‘autumn_r’, ‘binary’, ‘binary_r’, ‘bone’, ‘bone_r’, ‘brg’, ‘brg_r’, ‘bwr’, ‘bwr_r’, ‘cividis’, ‘cividis_r’, ‘cool’, ‘cool_r’, ‘coolwarm’, ‘coolwarm_r’, ‘copper’, ‘copper_r’, ‘cubehelix’, ‘cubehelix_r’, ‘flag’, ‘flag_r’, ‘gist_earth’, ‘gist_earth_r’, ‘gist_gray’, ‘gist_gray_r’, ‘gist_heat’, ‘gist_heat_r’, ‘gist_ncar’, ‘gist_ncar_r’, ‘gist_rainbow’, ‘gist_rainbow_r’, ‘gist_stern’, ‘gist_stern_r’, ‘gist_yarg’, ‘gist_yarg_r’, ‘gnuplot’, ‘gnuplot2’, ‘gnuplot2_r’, ‘gnuplot_r’, ‘gray’, ‘gray_r’, ‘hot’, ‘hot_r’, ‘hsv’, ‘hsv_r’, ‘inferno’, ‘inferno_r’, ‘jet’, ‘jet_r’, ‘magma’, ‘magma_r’, ‘nipy_spectral’, ‘nipy_spectral_r’, ‘ocean’, ‘ocean_r’, ‘pink’, ‘pink_r’, ‘plasma’, ‘plasma_r’, ‘prism’, ‘prism_r’, ‘rainbow’, ‘rainbow_r’, ‘seismic’, ‘seismic_r’, ‘spring’, ‘spring_r’, ‘summer’, ‘summer_r’, ‘tab10’, ‘tab10_r’, ‘tab20’, ‘tab20_r’, ‘tab20b’, ‘tab20b_r’, ‘tab20c’, ‘tab20c_r’, ‘terrain’, ‘terrain_r’, ‘twilight’, ‘twilight_r’, ‘twilight_shifted’, ‘twilight_shifted_r’, ‘viridis’, ‘viridis_r’, ‘winter’, ‘winter_r’

他们都位于plt.cm的命名空间中

确定需要的配色方案

实际上关于配色方案的选择并不在如何使用工具的讲解中出现,这里只是简单的讲下

根据我们需要配色的对象的数值不同,我们通常只重点关注三种不同的配色方案

顺序配色方案:由一组连续的颜色构成的配色方案,例如:binary或viridis互逆配色方案:通常由梁总互补的颜色构成,表示正反两种含义.例如:RdGy或PuOr定性配色方案:随机顺序的一组颜色,只需要区别图中的每个元素,例如:rainbow或jet

下面我们将看看每种配色方案的效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

更多的颜色设置,自己一一尝试即可

配置颜色条的范围

我们可以使用plt.clim来配置颜色条的刻度范围,同时我们也能够指定plt.colorbar()的extend参数来指定是否使用上下箭头来表示超出范围的值

plt.figure(figsize=(10,3.5)) x=np.linspace(start=0,stop=10,num=1000) Z=np.sin(x)*np.cos(x[:,np.newaxis]) plt.subplot(1,2,1) plt.imshow(Z,cmap='RdBu') plt.colorbar() plt.subplot(1,2,2) plt.imshow(Z,cmap='RdBu') plt.colorbar(extend='both') plt.clim(-1,1) plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B8OqIAzN-1596865634954)(图片/Figure_50.png)]

配置离散的颜色条

虽然默认所有颜色调都是连续的,但是有的时候我们可能需要使用颜色条来表示离散值,为此,我们可以使用离散的颜色条

最简单的做法就是使用plt.cm.get_cmap()函数,将配色方案和需要离散的区间格式传入进去即可

x=np.linspace(start=0,stop=10,num=1000) Z=np.sin(x)*np.cos(x[:,np.newaxis]) plt.imshow(Z,cmap=plt.cm.get_cmap('RdBu',6)) plt.colorbar() plt.show()

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有