matplotlib中plt.legend等的使用方法

1. plt.legend()

用于给图像加图例。

图例是集中于地图一角或一侧的地图上各种符号和颜色所代表内容与指标的说明,有助于更好的认识地图。

语法参数如下: matplotlib.pyplot.legend(*args, **kwargs)

keyword Description
loc Location code string, or tuple (see below).图例所有figure位置
prop the font property字体参数
fontsize the font size (used only if prop is not specified)
markerscale the relative size of legend markers vs. original
图例标记与原始标记的相对大小
markerfirst If True (default), marker is to left of the label.
如果为True,则图例标记位于图例标签的左侧
numpoints the number of points in the legend for line
为线条图图例条目创建的标记点数
scatterpoints the number of points in the legend for scatter plot
为散点图图例条目创建的标记点数
scatteryoffsets a list of yoffsets for scatter symbols in legend
为散点图图例条目创建的标记的垂直偏移量
frameon If True, draw the legend on a patch (frame).
控制是否应在图例周围绘制框架
fancybox If True, draw the frame with a round fancybox.
控制是否应在构成图例背景的FancyBboxPatch周围启用圆边
shadow If True, draw a shadow behind legend.
控制是否在图例后面画一个阴
framealpha Transparency of the frame.
控制图例框架的 Alpha 透明度
edgecolor Frame edgecolor.
facecolor Frame facecolor.
ncol number of columns 设置图例分为n列展示
borderpad the fractional whitespace inside the legend border
图例边框的内边距
labelspacing the vertical space between the legend entries
图例条目之间的垂直间距
handlelength the length of the legend handles 
图例句柄的长度
handleheight the height of the legend handles 
图例句柄的高度
handletextpad the pad between the legend handle and text 
图例句柄和文本之间的间距
borderaxespad the pad between the axes and legend border
轴与图例边框之间的距离
columnspacing the spacing between columns 列间距
title the legend title
bbox_to_anchor the bbox that the legend will be anchored.指定图例在轴的位置
bbox_transform the transform for the bbox. transAxes if None.

常用的几个参数:

(1)设置图列位置

plt.legend(loc='upper center')

0: ‘best'
1: ‘upper right'
2: ‘upper left'
3: ‘lower left'
4: ‘lower right'
5: ‘right'
6: ‘center left'
7: ‘center right'
8: ‘lower center'
9: ‘upper center'
10: ‘center'

(2)设置图例字体大小

fontsize : int or float or {‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’}

(3)设置图例边框及背景

plt.legend(loc='best',frameon=False) #去掉图例边框
plt.legend(loc='best',edgecolor='blue') #设置图例边框颜色
plt.legend(loc='best',facecolor='blue') #设置图例背景颜色,若无边框,参数无效

对于边框还可以采用面向对象方式:

legend = plt.legend(["First", "Second"])
frame = legend.get_frame()
frame.set_facecolor('blue')

(4)设置图例标题

legend = plt.legend(["CH", "US"], title='China VS Us')

(5)设置图例名字及对应关系

legend = plt.legend([p1, p2], ["CH", "US"])

from matplotlib import pyplot as plt
import numpy as np
 
train_x = np.linspace(-1, 1, 100)
train_y_1 = 2*train_x + np.random.rand(*train_x.shape)*0.3
train_y_2 = train_x**2+np.random.randn(*train_x.shape)*0.3
 
p1 = plt.scatter(train_x, train_y_1, c='red', marker='v' )
p2= plt.scatter(train_x, train_y_2, c='blue', marker='o' )
legend = plt.legend([p1, p2], ["CH", "US"], facecolor='blue')

plt.show()

2. plt.scatter()

用于画散点图。

x,y X和Y是长度相同的数组
s size,点的大小,标量或与数据长度相同的数组
c color,点的颜色,标量或与数据长度相同的数组
marker MarketStyle,可选,点的形状,默认'o'
cmap Colormap,可选,默认'None'
norm Normalize,亮度设置,0-1
vmin,vmax 亮度设置
alpha 透明度,0-1
linewidths  

其中散点的形状参数marker如下:

其中颜色参数c如下:

scatter(x, y, 点的大小, 颜色,标记),这是最主要的几个用法,如果括号中不写s=  c=则按默认顺序,写了则按规定的来,不考虑顺序

import matplotlib.pyplot as plt 

#x,y,大小,颜色
plt.scatter([1,2,3,4],[2,4,6,8],[10,20,30,400],['r', 'b','y','k'])   
plt.scatter([1,2,3,4],[9,8,7,6],s=10,c='b', marker='v')   

plt.show()
import numpy as np
import matplotlib.pyplot as plt

# Fixing random state for reproducibility
np.random.seed(19680801)


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()

3. plt.plot()

一个通用命令,将(x, y)绘制成线条或散点图。

x, y 数据,x是可选的,默认range(len(y))
fmt format,格式,形状,例如,'ro'表示红圈
data 标有数据的对象,可选

其中,线条的格式还可以使用如下线属性:

alpha float,透明度
fillstyle {'full', 'left', 'right', 'bottom', 'top', 'none'}
linestyle/ls {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
linewidth/lw float
marker marker style
markeredgecolor/mec color
markeredgewidth/mew float
markerfacecolor/mfc color
markersize/ms float
... ...

当线属性与fmt冲突时,线属性优先。

一些默认的写法:

>>> plot(x, y)        # plot x and y using default line style and color
>>> plot(x, y, 'bo')  # plot x and y using blue circle markers
>>> plot(y)           # plot y using x as index array 0..N-1
>>> plot(y, 'r+')     # ditto, but with red plusses
import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(0, 2*np.pi, 32, endpoint=True)
C,S = np.cos(X), np.sin(X)

#plt.plot(X,C)
#plt.plot(X,S)
plt.plot(X, C, 'go--')
plt.plot(X,S, color='green', marker='o', linestyle='dashed')
# 一个是fmt,一个是线属性,但是它们的格式是一样的

plt.show()

4. plt.figure()

用于创建一个新图。

num 新图的编号,默认递增
figsize 宽度,高度,以英寸为单位
dpi 分辨率,整数
facecolor 背景颜色
edgecolor 边框颜色
frameon 若为False,则没有边框
clear 若为True,如果图的编号已存在则先清除

如果有多个figure,请显示的调用 pyplot.close() 关闭你不需要使用的figure,以便pyplot能正确的清理内存。

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(0, 2*np.pi, 32, endpoint=True)
C,S = np.cos(X), np.sin(X)

plt.figure(num=1)
plt.plot(X,C)
#plt.close()

plt.figure(2)
plt.plot(X,S)

plt.figure(3)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

plt.show()

会连续展现三张图,注意与下面subplot的区别。

对于只有一张图时,也有作用,例如设置尺寸和分辨率等:

# 创建一个8x6大小的figure,并设置每英寸80个像素点
plt.figure(figsize=(8, 6), dpi=80)

5. plt.subplot()

用于在一个Figure对象里画多个子图(Axes)。

其调用格式:subplot(numRows, numCols, plotNum),即(行、列、序号)。

图表的整个绘图区域被分成numRows行和numCols列,plotNum参数指定创建的Axes对象所在的区域(左上角序号为1)

如果行数、列数和序号都是个位数可以简写成一个整数,否则需要用逗号隔开。

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(0, 2*np.pi, 32, endpoint=True)
C,S = np.cos(X), np.sin(X)

plt.subplot(221)
plt.plot(X,C)

plt.subplot(2,2,2) #可以隔开,也可以不隔开
plt.plot(X,S)

plt.subplot(212)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

plt.show()

 

 

参考链接:

1. CSDN开码牛-matplotlib命令与格式:图例legend语法及设置

2. CSDNweixin_41950276-plt.legend( )函数,给图像加上图例

3. matplotlib.pyplot.legend官方文档

4. CSDNxiaodaicai4452-python绘图基础—scatter用法

5. matplotlib.pyplot.scatter官方文档

6. matplotlib.pyplot.plot官方文档

7. matplotlib.pyplot.figure官方文档

8. CSND繁小华-matplotlib绘制多个子图——subplot

posted @ 2020-02-01 15:16  Rogn  阅读(64112)  评论(4编辑  收藏  举报