matplotlib:艺术画笔matplotlib.artist.Artist类

艺术画笔matplotlib.artist.Artist类

matplotlib的原理或者说基础逻辑是,用Artist对象在画布(canvas)上绘制(Render)图形,所以matplotlib有三个层次的API:matplotlib.backend_bases.FigureCanvas 代表了绘图区,所有的图像都是在绘图区完成的
matplotlib.backend_bases.Renderer 代表了渲染器,可以近似理解为画笔,控制如何在 FigureCanvas 上画图。
matplotlib.artist.Artist 代表了具体的图表组件,即调用了Renderer的接口在Canvas上作图。
前两者处理程序和计算机的底层交互的事项,第三项Artist就是具体的调用接口来做出我们想要的图,比如图形、文本、线条的设定。
Artist有两种类型:primitives 和containers。
primitive是基本要素,它包含一些我们要在绘图区作图用到的标准图形对象,如曲线Line2D,文字text,矩形Rectangle,图像image等。
container是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes和坐标轴Axis。
图形坐标系和坐标轴

常见图形绘制

1. 折线图主要用plot()函数绘制
常用的参数有:
xdata:需要绘制的line中点的在x轴上的取值,若忽略,则默认为range(1,len(ydata)+1)
ydata:需要绘制的line中点的在y轴上的取值
linewidth:线条的宽度
linestyle:线型
color:线条的颜色

# 1. 折线图
# plt.plot(x)
# plt.show()

fig, ax = plt.subplots()
x = [1, 2, 3]
ax.plot(x, c='red', lw=2, linestyle='dashed')
plt.show()

2. hist-直方图
x: 数据集,最终的直方图将对数据集进行统计
bins: 统计的区间分布
range: tuple, 显示的区间,range在没有给出bins时生效
density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
histtype: 可选{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
align: 可选{‘left’, ‘mid’, ‘right’}之一,默认为’mid’,控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
log: bool,默认False,即y坐标轴是否选择指数刻度
stacked: bool,默认为False,是否为堆积状图

# 2. hist()函数绘制直方图
# 生成数据集x
x = np.random.randint(0, 100, 100)  # 生成100个整数在[0,100)内,如果是random.randint(0,100)则生成的数在[0,100]内,不过不能指定次数
# 生成统计区间
bins = np.arange(0, 101, 5)
# 开始画图
plt.hist(x, bins, color='red', alpha=0.8)  # alpha是透明度
plt.xlabel('数值')
plt.ylabel('数值出现的次数')
plt.title('直方图')
plt.show()

3. bar-柱状图
left:x轴的位置序列,一般采用range函数产生一个序列,但是有时候可以是字符串
height:y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;
alpha:透明度,值越小越透明
width:为柱形图的宽度,一般这是为0.8即可;
color或facecolor:柱形图填充的颜色;
edgecolor:图形边缘颜色
label:解释每个图像代表的含义,这个参数是为legend()函数做铺垫的,表示该次bar的标签

y = range(1, 17)
plt.bar(np.arange(16), y, alpha=0.5, color='red', edgecolor='blue', lw=2, width=0.5, label='bar')
plt.show()

4. fill-填充线图(多边形图)

# 4. 多边形图
fig, ax = plt.subplots(1, 2)
x = np.linspace(0, 5*np.pi, 100)
y = np.sin(x)
ax1 = ax[0]
ax2 = ax[1]
ax1.fill(x, y, c='g', alpha=0.5)
ax2.fill([0, 1, 3, 2])
plt.show()

5. pie-饼状图
x:契型的形状大小,一维数组列表也可以。
explode:如果不是等于None,则是一个len(x)数组,它指定用于偏移每个楔形块的半径的分数。
labels:用于指定每个契型块的标记,取值是列表或为None。
colors:饼图循环使用的颜色序列。如果取值为None,将使用当前活动循环中的颜色。
startangle:饼状图开始的绘制的角度。

# 5. pie-饼状图
labels = ['bicycle', 'car', 'airplane', 'ship', 'walk']
size = [15, 50, 5, 5, 20]
explode = [0, 0.1, 0, 0, 0]
plt.pie(size, labels=labels, autopct='%1.1f%%', explode=explode)
plt.show()

6. scatter绘制散点图
x:数据点x轴的位置
y:数据点y轴的位置
s:尺寸大小
c:可以是单个颜色格式的字符串,也可以是一系列颜色
marker: 标记的类型

# 6. 散点图
x = [0, 2, 4, 6, 8, 10] 
y = [10]*len(x) 
s = [20*2**n for n in range(len(x))] 
plt.scatter(x,y,s=s) 
plt.show()

7. inshow()来根据数组绘制图片

grid = np.random.rand(4, 4)
# plt.imshow(grid)
# plt.show()
methods = [None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16',
           'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric',
           'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']
fig, axs = plt.subplots(nrows=3, ncols=6, figsize=(9, 6), subplot_kw={'xticks': [], 'yticks': []})  # subplot_kw来设置刻度
for ax, method in zip(axs.flat, methods):
    ax.imshow(grid, interpolation=method)
    ax.set_title(str(method))  # 加str是为了是第一个None显示出来

plt.show()

对象容器

主要有Figure,Axes,Axis,Tick四种容器

1. Figure容器
Figure包含了图表中的所有元素,一张图表的背景就是在Figure.patch中的一个矩形Rectangle,当我们向图表添加Figure.add_subplot()或者Figure.add_axes()元素时,这些都会被添加到Figure.axes列表中。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(211)  # 作一幅2*1的图,选择第1个子图,这里只显示你选择的那个子图
ax2 = fig.add_axes([0.3, 0.2, 0.7, 0.3])  # 位置参数,四个数分别代表了(left,bottom,width,height)
# fig, ax = plt.subplots()  # 里面没有参数,则只有一个子图,如果有参数,则返回多个子图
# fg, axes = plt.subplots(2, 2)
# axes[0, 0].plot([1, 2, 3])
ax1.grid(True)  # 设置网格
print(fig.axes)
plt.show()

2. Axes容器
和Figure容器类似,Axes包含了一个patch属性,对于笛卡尔坐标系而言,它是一个Rectangle;对于极坐标而言,它是一个Circle。这个patch属性决定了绘图区域的形状、背景和边框。Axes有许多方法用于绘图,如.plot()、.text()、.hist()、.imshow()等方法用于创建大多数常见的primitive(如上面说的那几种)。Subplot就是一个特殊的Axes。

fig, ax = plt.subplots(1, 2)
ax[0].patch.set_facecolor('green')
ax[1].patch.set_facecolor('red')
plt.show()

3. Axis容器
matplotlib.axis.Axis实例处理tick line、grid line、tick label以及axis label的绘制,它包括坐标轴上的刻度线、刻度label、坐标网格、坐标轴标题。通常你可以独立的配置y轴的左边刻度以及右边的刻度,也可以独立地配置x轴的上边刻度以及下边的刻度。

# 3. Axis容器
# axis = ax.xaxis # axis为X轴对象
# axis.get_ticklocs()     # 获取刻度线位置
# axis.get_ticklabels()   # 获取刻度label列表(一个Text实例的列表)。 可以通过minor=True|False关键字参数控制输出minor还是major的tick label。
# axis.get_ticklines()    # 获取刻度线列表(一个Line2D实例的列表)。 可以通过minor=True|False关键字参数控制输出minor还是major的tick line。
# axis.get_data_interval()# 获取轴刻度间隔
# axis.get_view_interval()# 获取轴视角(位置)的间隔

fig = plt.figure() # 创建一个新图表
rect = fig.patch   # 矩形实例并将其设为黄色
rect.set_facecolor('lightgoldenrodyellow')

ax1 = fig.add_axes([0.1, 0.3, 0.4, 0.4]) # 创一个axes对象,从(0.1,0.3)的位置开始,宽和高都为0.4,
rect = ax1.patch   # ax1的矩形设为灰色
rect.set_facecolor('lightslategray')

for label in ax1.xaxis.get_ticklabels():
    # 调用x轴刻度标签实例,是一个text实例
    label.set_color('red')  # 颜色
    label.set_rotation(45)  # 旋转角度
    label.set_fontsize(16)  # 字体大小

for line in ax1.yaxis.get_ticklines():
    # 调用y轴刻度线条实例, 是一个Line2D实例
    line.set_color('red')    # 颜色
    line.set_markersize(18)    # marker大小
    line.set_markeredgewidth(3)  # marker粗细

plt.show()

4. Tick容器

# 4. Tick容器
fig, ax = plt.subplots()
ax.plot(100*np.random.rand(20))

# 设置ticker的显示格式
formatter = matplotlib.ticker.FormatStrFormatter('$%1.2f')
ax.yaxis.set_major_formatter(formatter)

# 设置ticker的参数,右侧为主轴,颜色为绿色
ax.yaxis.set_tick_params(which='major', labelcolor='green',
                         labelleft=False, labelright=True)  # which是选择对主或者副坐标轴进行操作

plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值