3.Matplotlib配置图例与颜色条

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]))
>>>
<class 'matplotlib.lines.Line2D'>

所以我们实际上对线条的样式不仅可以通过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的命名空间中

确定需要的配色方案

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

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

  1. 顺序配色方案:由一组连续的颜色构成的配色方案,例如:binary或viridis
  2. 互逆配色方案:通常由梁总互补的颜色构成,表示正反两种含义.例如:RdGy或PuOr
  3. 定性配色方案:随机顺序的一组颜色,只需要区别图中的每个元素,例如: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() 	

在这里插入图片描述

  • 22
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
matplotlib 是一个用于绘制静态、动态和交互式图形的强大 Python 库。它提供了丰富的配置选项,可以用来定制图形的外观和行为。下面是一些常见的 matplotlib 图形配置选项: 1. 设置图形风格:可以使用 `plt.style.use()` 函数来设置图形的风格,包括预定义的风格(如 "seaborn"、"ggplot" 等)或自定义的样式表。 2. 设置图形尺寸:可以使用 `plt.figure(figsize=(width, height))` 函数来设置图形的尺寸,其中 `width` 和 `height` 是以英寸为单位的宽度和高度。 3. 设置线样式:可以使用 `plt.plot()` 函数中的 `linestyle` 参数来设置线的样式,如实线 (`'-'`)、虚线 (`'--'`)、点线 (`'-.'`) 等。 4. 设置颜色:可以使用 `plt.plot()` 函数中的 `color` 参数来设置线或标记点的颜色,可以使用字符串表示颜色(如 "red"、"blue" 等),也可以使用 RGB 值或 HTML 颜色代码。 5. 添加标签和标题:可以使用 `plt.xlabel()`、`plt.ylabel()` 和 `plt.title()` 函数来添加坐标轴标签和图形标题。 6. 设置坐标轴范围:可以使用 `plt.xlim()` 和 `plt.ylim()` 函数来设置 x 和 y 坐标轴的范围。 7. 设置刻度标签:可以使用 `plt.xticks()` 和 `plt.yticks()` 函数来设置坐标轴上的刻度标签。 8. 设置图例:可以使用 `plt.legend()` 函数来添加图例,可以通过 `loc` 参数指定图例的位置。 9. 设置网格线:可以使用 `plt.grid()` 函数来显示或隐藏图形的网格线。 以上是一些常用的 matplotlib 图形配置选项,你可以根据需要选择适合的选项来定制你的图形。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值