手机套 东莞网站建设,做一个网站成本是多少,看一个网站是用什么语言做的,做家务的男人网站文章目录一. 改变 x 轴显示内容 xticks 方法再次说明1. x 轴是数值型数据2. 将 x 轴更改为字符串3. 总结二. 其他元素可视性1. 显示网格#xff1a;plt.grid()2. plt.gca( ) 对坐标轴的操作三. plt.rcParams 设置画图的分辨率#xff0c;大小等信息四. 图表的样式参数设置1. …
文章目录一. 改变 x 轴显示内容 xticks 方法再次说明1. x 轴是数值型数据2. 将 x 轴更改为字符串3. 总结二. 其他元素可视性1. 显示网格plt.grid()2. plt.gca( ) 对坐标轴的操作三. plt.rcParams 设置画图的分辨率大小等信息四. 图表的样式参数设置1. 线条样式2. 线条样式缩写五. 创建图形对象六. 绘制多子图1. add_axes()添加区域2. subplot() 函数它可以均等地划分画布3. 设置多图的基本信息方式3.1 在创建的时候直接设置3.2 使用 pyplot 模块中的方法设置后再绘制3.3 使用返回的区域对象设置4. subplots() 函数详解在最开始我们先引入 Matplotlib 库便于后续的操作。
from matplotlib import pyplot as plt
import numpy as np一. 改变 x 轴显示内容 xticks 方法再次说明
第一个参数需要一个数字列表指示 x 轴上的记号应该指向哪里我们向这个函数传递了一个字符串但它并不知道如何将其转换为 x 轴上的位置。
1. x 轴是数值型数据
例如我们使用 np.arange() 生成从 1991 年到 2020 年30 年的日期数据。
dates np.arange(1991,2021)
dates
#array([1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
# 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020])随后我们再使用 np.random.randint() 随机生成这 30 年的销量数据。
sales np.random.randint(50,500,size30)
sales
#array([150, 115, 52, 247, 113, 54, 204, 405, 245, 438, 251, 392, 222,
# 416, 388, 112, 250, 473, 444, 195, 147, 123, 136, 294, 240, 129,
# 290, 255, 381, 149])最后我们将日期作为横坐标销量作为纵坐标绘制销量图。
plt.plot(dates,sales)通过上述步骤我们可以发现对于数值型数组绘图会自动分割。但是如果想按照自己的逻辑分割注意数值型对应轴上面的数值比如我们可以将 x 轴的刻度进行修改并绘制销量图。
%matplotlib inline
plt.xticks([1980,1982,1993])
plt.plot(dates,sales)当前会看到 x 轴上面没有数据其实是有数据只不过默认当前图形的 x 轴区间是 [1991,2021]对此我们可以借助设置 %matplotlib notebook 移动图像来查看。
- %matplotlib notebook
plt.xticks([1980,1982,1993])
plt.plot(dates,sales)如果我们想按照自己的逻辑分割注意数值型使用的是元素本身而不是元素的索引。如果我们直接使用元素本身就会产生如下现象。
plt.xticks([1990,2005,2010,2020])
plt.plot(dates,sales)因此如果我们想 x 轴刻度每两年显示一次的话就需要使用元素的索引进行销量图的绘制。
plt.xticks(np.arange(dates.min(),dates.max()2,2),rotation45)
plt.plot(dates,sales)那么对于上述的逻辑分割我们也是可以使用元素本身的只不过需要一些计算。
plt.xticks([dates[i] for i in range(0,len(dates),2)][2020],rotation45) # 元素本身
plt.plot(dates,sales)2. 将 x 轴更改为字符串
我们将从 1991 年到 2020 年30 年的日期修改为字符串。这里需要注意的是 xticks 第一个参数中元素不能我字符串 。
dates np.arange(1991,2021).astype(np.str_)
plt.xticks(range(1,len(dates),2),rotation45) # 元素本身
plt.plot(dates,sales)3. 总结
1 当 x 轴是数值型会按照数值型本身作为 x 轴的坐标。2 当 x 轴为字符串类型会按照索引作为 x 轴的坐标。具体可见如下例子
timenp.arange(2000,2020).astype(np.str_)
sales [109, 150, 172, 260, 273, 333, 347, 393, 402, 446, 466, 481, 499,504, 513, 563, 815, 900, 930, 961]
plt.xticks(range(0,len(time),2))##,labels[year%s%i for i in time],rotation45,colorred)
plt.yticks(colorblue)
plt.plot(time,sales)二. 其他元素可视性
1. 显示网格plt.grid()
plt.grid(True, linestyle --,color gray, linewidth 0.5,axis x)显示网格 plt.grid() 的参数有如下含义linestyle线型。color颜色。linewidth宽度。axisxyboth显示x/y/两者的格网。例如我们可以使用 np.linspace 生成从 -Π 到 Π 并且包含终止值的 256 个数据并分别生成一个 cos 和 sin 函数。
x np.linspace(-np.pi,np.pi,256,endpoint True)
c, s np.cos(x), np.sin(x)
plt.plot(x, c)
plt.plot(x, s)
plt.grid(True,linestyle--)2. plt.gca( ) 对坐标轴的操作
首先观察画布上面的坐标轴如下图。 上图中用红色标识出的黑色边界框线在 Matplotlib 中被称为 spines中文翻译为脊柱。在我的理解看来意思是这些边界框线是坐标轴区域的支柱那么我们最终要挪动的其实就是这四个支柱且所有的操作均在 plt.gca( ) 中完成gca 就是 get current axes 的意思。接下来需要绘制图如下 首先我们创建 x 轴数据使用 np.arange( ) 生成从 -50 到 50 的 x 轴数据再创建 y 轴的数据y 是 x 的平方并绘制图形。
x np.arange(-50,51)
y x ** 2
plt.plot(x, y)然后我们获取当前坐标轴通过坐标轴 spines 确定 topbottomleftright分别表示上下左右)。此时我们需要的是坐标轴因此不需要右侧和上侧线条将其颜色设置为 none。
x np.arange(-50,51)
y x ** 2
ax plt.gca()
ax.spines[right].set_color(none)
ax.spines[top].set_color(none)
plt.plot(x, y)随后我们在上述的基础上分别定义 xy获取当前坐标轴移动下轴到指定位置在这里position 位置参数有三种data , outward向外axes。axes 是 0.0 - 1.0 之间的值按轴上的比例划分。data 表示按数值挪动其后数字代表挪动到 Y 轴的刻度值。最后在设置 y 的取值范围将两个 0 点移动到一起。
x np.arange(-50,51)
y x ** 2
ax plt.gca()
ax.spines[right].set_color(none)
ax.spines[top].set_color(none)
ax.spines[left].set_position((axes,0.5))
plt.ylim(0, y.max())
plt.plot(x, y)三. plt.rcParams 设置画图的分辨率大小等信息
plt.rcParams[‘figure.figsize’] (8.0, 4.0) 是设置 figure_size 英寸。plt.rcParams[‘figure.dpi’] 300 是设置分辨率。默认的像素[6.0,4.0]分辨率为 72图片尺寸为 432x288。如果指定 dpi100则图片尺寸为 600*400。如果指定 dpi300则图片尺寸为 1800*1200。针对上述我们进行如下的样例演示。1 分辨率为 72图片尺寸为 432x288默认值。
plt.plot() 2 将大小设置为 (6.0,4.0) 英寸。
plt.rcParams[figure.figsize] (6.0, 4.0)
plt.plot()3 指定 dpi100图片尺寸为 600*400。
plt.rcParams[figure.dpi] 100
plt.plot()将大小设置为 (3,2) 英寸注意横纵坐标的刻度也发生了变化。
plt.rcParams[figure.figsize](3,2)
plt.plot()四. 图表的样式参数设置
1. 线条样式
传入 xy通过 plot 画图并设置折线颜色、透明度、折线样式和折线宽度标记点、标记点大小、标记点边颜色、标记点边宽网格等。
plt.plot(x,y,colorred,alpha0.3,linestyle-,linewidth5,markero,markeredgecolorr,markersize20,markeredgewidth10)1 color可以使用颜色的 16 进制也可以使用线条颜色的英文还可是使用之前的缩写。
字符颜色英文全称‘b’蓝色blue‘g’绿色green’ r ’红色red’ c ’青色cyan’ m ’品红magenta’ y ’黄色yellow’ k ’黑色black’ w ’白色white
2 alpha0-1透明度。3 linestyle折线样式。
字符描述‘-’实线‘–’虚线‘-.’点划线‘:’虚线
4 marker 标记点:。
标记符号描述‘.’点标记‘o’圆圈标记‘x’X’标记‘D’钻石标记‘H’六角标记‘s’正方形标记‘’加号标记
例如如下应用
x np.arange(0, 100,10)
y x ** 2
linewidth 设置线条粗细label 设置线条标签color 设置线条颜色linestyle 设置线条形状marker 设置线条样点标记plt.plot(x, y, linewidth 2, label test, colorb, linestyle--, markerH)
plt.legend(locupper left)2. 线条样式缩写
我们可以设置两条曲线第一个是红色点划线第二个是品红虚线。将他们的线条样式进行缩写。
plt.plot([1,2,3],[4,7,6],r*-.)
plt.plot([2,4,5],[3,8,7],m--)除此之外我们也可以多设置几种线条样式的组合并将他们添加到图例当中。
plt.rcParams[figure.figsize](8,4)
xnp.linspace(0,10,100)
plt.plot(x,x0, -g, label-g)
plt.plot(x,x1, --c, label--c)
plt.plot(x,x2, -.k, label-.k)
plt.plot(x,x3, -r, label-r)
plt.plot(x,x4, o, labelo)
plt.plot(x,x5, x, labelx)
plt.plot(x,x6, dr, labeldr)
plt.legend(loclower right,framealpha0.5,shadowTrue, borderpad0.5)五. 创建图形对象
在 Matplotlib 中面向对象编程的核心思想是创建图形对象figure object。通过图形对象来调用其它的方法和属性这样有助于我们更好地处理多个画布。在这个过程中pyplot 负责生成图形对象并通过该对象来添加一个或多个 axes 对象即绘图区域。Matplotlib 提供了 matplotlib.figure 图形类模块它包含了创建图形对象的方法。通过调用 pyplot 模块中 figure() 函数来实例化 figure 对象。
plt.figure(numNone,figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue, **kwargs)其参数具有如下含义num 表示图像编号或名称数字为编号字符串为名称。figsize 表示指定 figure 的宽和高单位为英寸。dpi 表示定绘图对象的分辨率即每英寸多少个像素缺省值为 72。facecolor 表示背景颜色。edgecolor 表示边框颜色。frameon 表示是否显示边框。具体可见如下例子。创建图形对象就相当于我们创建一个画布。之前通过配置更改图形的分辨率和宽高.。现在可以在创建图像对象的时候创建。
from matplotlib import pyplot as plt
fig plt.figure()
fig plt.figure(f1,figsize(3,2),dpi100)
x np.arange(0,50)
y x ** 2
plt.plot(x,y)然后我们创建图形对象图形对象的分辨率为 100背景颜色为灰色并获取轴。
x np.arange(0,50)
y x ** 2
fig plt.figure(f1,figsize(4,2), dpi100,facecolorgray)
ax plt.gca()
ax.plot(x,y)
plt.plot(x,y)六. 绘制多子图
figure 是绘制对象可理解为一个空白的画布一个 figure 对象可以包含多个 Axes 子图一个 Axes 是一个绘图区域不加设置时Axes 值默认为 1且每次绘图其实都是在 figure 上的 Axes 上绘图。我们是在图形对象上面的 Axes 区域进行作画。接下来我们将学习绘制子图的几种方式1 add_axes()添加区域。2 subplot()均等地划分画布,只是创建一个包含子图区域的画布返回区域对象。3 subplots()既创建了一个包含子图区域的画布又创建了一个 figure 图形对象返回图形对象和区域对象。
1. add_axes()添加区域
Matplotlib 定义了一个 axes 类轴域类该类的对象被称为 axes 对象即轴域对象它指定了一个有数值范围限制的绘图区域。在一个给定的画布figure中可以包含多个 axes 对象但是同一个 axes 对象只能在一个画布中使用。2D 绘图区域axes包含两个轴axis对象其语法如下
add_axes(rect)该方法用来生成一个 axes 轴域对象对象的位置由参数 rect 决定。rect 是位置参数接受一个由 4 个元素组成的浮点数列表形如 [left, bottom, width, height] 它表示添加到画布中的矩形区域的左下角坐标 (x, y)以及宽度和高度。如下所示ax1 从画布起始位置绘制宽高和画布一致ax2 从画布 20% 的位置开始绘制, 宽高是画布的 50%。
fig plt.figure(figsize(4,2),facecolorg)
ax1fig.add_axes([0,0,1,1])
ax2fig.add_axes([0.1,0.6,0.3,0.3])
ax3fig.add_axes([0.5,0.6,0.2,0.3])
ax1.plot(x, y)
ax2.plot(x, y)
ax3.plot(x, y)注意每个元素的值是画布宽度和高度的分数。即将画布的宽、高作为 1 个单位。比如[ 0.2, 0.2, 0.5, 0.5]它代表着从画布 20% 的位置开始绘制, 宽高是画布的 50%我们创建 ax1和画布位置一致ax2 从画布 40% 的位置开始绘制, 宽高是画布的 50%
fig plt.figure(figsize(4,2),facecolorg)
x np.arange(0,50,2)
y x ** 2
ax1 fig.add_axes([0.0,0.0,1,1])
ax1.plot(x,y)
ax2fig.add_axes([0.4,0.4,0.3,0.3])
ax2.plot(x,y)其中区域中基本方法的使用如下区域图表名称set_title。区域中 x 轴和 y 轴名称set_xlabel() 和 set_ylabel()。刻度设置set_xticks()。区域图表图例legend()。
2. subplot() 函数它可以均等地划分画布
其参数格式如下
ax plt.subplot(nrows, ncols, index,*args, **kwargs)nrows 表示行。ncols 表示列。index 表示索引。kwargs 表示 title/xlabel/ylabel 等。也可以直接将几个值写到一起例如subplot(233)。返回区域对象。nrows 与 ncols 表示要划分几行几列的子区域nrows*nclos表示子图数量index 的初始值为1用来选定具体的某个子区域。例如 subplot(233) 表示在当前画布的右上角创建一个两行三列的绘图区域如下图所示同时选择在第 3 个位置绘制子图。 如果新建的子图与现有的子图重叠那么重叠部分的子图将会被自动删除因为它们不可以共享绘图区域。现在创建一个子图它表示一个有 1 行 2 列的网格的顶部图。引为这个子图将与第一个重叠所以之前创建的图将被删除x 可省略默认 [0,1…,N-1] 递增。
plt.plot([1,2,3])
plt.subplot(211)
plt.plot(range(50,70))
plt.subplot(212)
plt.plot(np.arange(12)**2)- 如果不想覆盖之前的图需要先创建画布。还可以先设置画布的大小再通过画布创建区域。
fig plt.figure(figsize(4,2))
fig.add_subplot(111)
plt.plot(range(20))
fig.add_subplot(221)
plt.plot(range(12))3. 设置多图的基本信息方式
3.1 在创建的时候直接设置
对于 subplot 关键词赋值参数的了解可以将光标移动到 subplot 方法上使用快捷键 shifttab 查看具体内容。现在创建一个子图它表示一个有 2 行 1 列的网格的顶部图。x 可省略,默认 [0,1…,N-1] 递增。
plt.subplot(211,titlepic1, xlabelx axis)
plt.plot(range(50,70))
plt.subplot(212, titlepic2, xlabelx axis)
plt.plot(np.arange(12)**2)发现子图标题重叠在最后使用 plt.tight_layout()。
plt.subplot(211,titlepic1, xlabelx axis)
plt.plot(range(50,70))
plt.subplot(212, titlepic2, xlabelx axis)
plt.plot(np.arange(12)**2)
plt.tight_layout()3.2 使用 pyplot 模块中的方法设置后再绘制
plt.subplot(211)
plt.title(ax1)
plt.plot(range(50,70))
plt.subplot(212)
plt.title(ax2)
plt.plot(np.arange(12)**2)
plt.tight_layout()3.3 使用返回的区域对象设置
注意区域对象的方法很多都是 set_ 开头。
ax1 plt.subplot(211)
ax1.set_title(ax1)
ax1.plot(range(50,70))
ax2 plt.subplot(212)
ax2.set_title(ax2)
ax2.plot(np.arange(12)**2)
plt.tight_layout()4. subplots() 函数详解
matplotlib.pyplot 模块提供了一个 subplots() 函数它的使用方法和 subplot() 函数类似。其不同之处在于subplots() 既创建了一个包含子图区域的画布又创建了一个 figure 图形对象而 subplot() 只是创建一个包含子图区域的画布。subplots 的函数格式如下
fig , ax plt.subplots(nrows, ncols)nrows 与 ncols 表示两个整数参数它们指定子图所占的行数、列。函数的返回值是一个元组包括一个图形对象和所有的 axes 对象。其中 axes 对象的数量等于 nrows * ncols且每个 axes 对象均可通过索引值访问从 0 开始。下面我们创建了一个 2 行 2 列的子图并在每个子图中显示 4 个不同的图像。第一幅图像就是 (0,0)显示的是 x2x^{2}x2第二幅图像就是 (0,1)显示的是 x\sqrt{x}x第三幅图像就是 (1,0)显示的是 exe^{x}ex第四幅图像就是 (1,1)显示的是 log10x\log_{10}{x}log10x。
import matplotlib.pyplot as plt
import numpy as np
fig, axes plt.subplots(2,2)
x np.arange(1,5)
axes[0][0].plot(x, x*x)
axes[0][0].set_title(square)
axes[0][1].plot(x, np.sqrt(x))
axes[0][1].set_title(square root)
axes[1][0].plot(x, np.exp(x))
axes[1][0].set_title(exp)
axes[1][1].plot(x,np.log10(x))
axes[1][1].set_title(log)
plt.tight_layout()
plt.show()