jupyter notebook第六章matplotlib库的一些案例分析加相关函数的解析

目录

前言

相关案例与解析

写在最后:


前言

Matplotlib 是一个在 python 下实现的类 matlab 的纯 python 的第三方库,旨在用 python实现 matlab 的功能,是python下最出色的绘图库。其风格跟 matlab 相似,同时也继承了 python 的简单明了。 要使用matplotlib得先安装 numpy 库 (一个python下数组处理的第三方库,可以很方便的处理矩阵,数组) 。 matplotlib 对于图像美化方面比较完善,可以自定义线条的颜色和样式,可以在一张绘图纸上绘制多张小图,也可以在一张图上绘制多条线, 可以很方便地将数据可视化并对比分析

Matplotlib模块依赖于NumPy和tkinter模块,可以绘制多种形式的图形,包括线图、直方图、饼图、散点图等,图形质量满足出版要求,是数据可视化的重要工具。Matplotlib中应用最广的是matplotlib.pyplot模块。Pyplot提供了一套和Matlab类似的绘图API,使得Matplotlib的机制更像Matlab。我们只需要调用Pyplot模块所提供的函数就可以实现快速绘图并设置图表的各个细节。 在Jupyter notebook中进行交互式绘图,需要执行一下语句: % matplotlib notebook 使用matplotlib时,使用的导入惯例为: import matplotlib.pyplot as plt

相关案例与解析

绘图基础: plt.show()显示图像 plt.legend()显示图例 plt.text()数值标签 plt.xlim()/ylim()轴刻度范围 plt.title()标题 plt.xlabel()/ylabel()轴标签 plt.xticks()/yticks()轴刻度标签

In [2]:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#将生成的交互式图嵌入notebook中
%matplotlib notebook 
 #将生成的静态图嵌入notebook中
%matplotlib inline

相关函数简介: figure():创建一个新的绘图窗口。 figtext():为figure添加文字 axes():为当前figure添加一个坐标轴 plot():绘图函数 polar():绘制极坐标图 axis():获取或设置轴属性的边界方法(坐标的取值范围) clf : 清除当前figure窗口
cla : 清除当前axes窗口 close : 关闭当前figure窗口 subplot : 一个图中包含多个axes text(): 在轴上添加文字 title(): 设置当前axes标题 xlabel/ylabel:设置当前X轴或Y轴的标签 hist():绘制直方图 hist2d():绘制二维在直方图 hold :设置当前图窗状态;off或者on imread():读取一个图像,从图形文件中提取数组 legend():为当前axes放置标签 pie():绘制饼状图 scatter():做一个X和Y的散点图,其中X和Y是相同长度的序列对象 stackplot():绘制一个堆叠面积图 acorr():绘制X的自相关函数 annotate():用箭头在指定的数据点创建一个注释或一段文本 bar():绘制垂直条形图
barh():绘制横向条形图 barbs():绘制一个倒钩的二维场

In [2]:

plt.plot([3,1,4,5,2])
plt.ylabel("Grade")
plt.savefig('test',dpi = 600)
#savefig将输出图形存储为文件,默认为png格式,可以通过dpi修改输出质量
plt.show()

In [3]:

plt.plot([0,2,4,6,8],[3,1,4,5,2])
plt.ylabel("Grade")
plt.axis([-1,10,0,6])#指的是横轴从-1开始到10,纵轴从0-6
plt.show()

绘图基础

In [4]:

data = np.arange(10)
plt.plot(data)
plt.show()

创建画布与子图: 第一部分主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多个图形的情况。最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制。 添加画布内容: 第二部分是绘图的主体部分。其中添加标题,坐标轴名称,绘制图形等步骤是并列的,没有先后顺序,可以先绘制图形,也可以先添加各类标签。但是添加图例一定要在绘制图形之后。 绘图的保存与显示: 第三部分主要用于保存和显示图形。 例:fig.savefig(save_path, format='png', transparent=True, dpi=300, pad_inches = 0)

例6-1 创建子图

In [4]:

fig = plt.figure()
#创建一个空白画布,可以指定画布大小,像素。
ax1 = fig.add_subplot(221)#两行两列的第一个图,可以逗号分开也可以不分开
#创建并选中子图,可以指定子图的行数,列数,与选中图片编号。
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(223)
ax1.plot([1.5,2,3.5,-1,1.6])#x默认位置标签,y轴是列表
plt.show()

In [8]:

plt.subplot(221)#虽然简便,但是不灵活
plt.subplot(224)

Out[8]:

<AxesSubplot:>

例6-3创建子图序列

In [9]:

plt.subplots(2,3)#加s是两行三列的子图
plt.show()

In [10]:

fig,axes = plt.subplots(2,3)#加名称

例6-4 调整子图周围的间距

In [13]:

fig,axes = plt.subplots(2,2,sharex = True,sharey = True)#两行两列的子图,sharex = True共享x轴
plt.subplots_adjust(wspace = 0,hspace = 0)
#.subplots_adjust调整图形  wspace = 0,hspace = 0横向与纵向的距离
for i in range(2):
    for j in range(2):
        axes[i,j].hist(np.random.randn(500),bins = 50,color = 'k',alpha = 0.5)
# axes坐标轴  hist直方图  生成500个随机数  
#bins划分的区间【分的类别越细,区间越窄 ,不可无限大会影响绘制】 color为黑色,alpha是透明度

例6-5 绘图时设置坐标轴属性

In [14]:

data = np.arange(0,1,0.01)#0-1之间的步长为0.01的100个数
plt.plot(data,data ** 2)#横轴为100个数,纵轴为100个数的平方
plt.plot(data,data ** 3)#3次方
plt.title('my lines example')#标题
plt.xlabel('x')#轴的标签
plt.ylabel('y')
plt.xlim(0,1)#刻度范围,默认为0-1
plt.ylim(0,1)
plt.xticks([0,0.2,0.4,0.6,0.8,1])#轴的刻度标签
plt.yticks([0,0.2,0.4,0.6,0.8,1])
plt.tick_params(labelsize = 12)#坐标轴刻度数字的大小
plt.legend(['y = x^2','y = x^3'])#显示图例
plt.show()

plt.savefig保存绘制的图片,可以指定图片的分辨率、边缘的颜色等参数 fig.savefig(save_path, format='png', transparent=True, dpi=300, pad_inches = 0) 参数说明: fname :包含文件路径或Python文件型对象的字符串。图片格式是从文件扩展名中推断出来的(例如pdf格式的.pdf) dpi :设置每英寸点数的分辨率,默认为100 facecolor,edgecolor:子图之外的图形背景颜色,默认是’w’(白色) format:文件格式(’png’,’pdf’,’svg’,’ps’等) bbox_inches:要保存的图片范围,如果设置为‘tight‘则去除图片周围的空白[紧凑模式]

plt.show()在本机显示图形

例6-6包含子图绘制的基础语法

In [16]:

data = np.arange(0,np.pi*2,0.01)#0-2Π,步长为0.01
fig1 = plt.figure(figsize = (9,7),dpi = 90)
#figsize指的是宽和高单位为英寸  dpi = 90每英寸的点数为90
ax1 = fig1.add_subplot(121)#一行两列的第一个子图
plt.title('lines example')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0,1)
plt.ylim(0,1)
plt.xticks([0,0.2,0.4,0.6,0.8,1])
plt.yticks([0,0.2,0.4,0.6,0.8,1])
plt.plot(data,data ** 2)
plt.plot(data,data ** 3)
plt.legend(['y = x^2','y = x^3'])
ax2 = fig1.add_subplot(122)
plt.title('sin-cos')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0,np.pi*2)#x轴为0-2Π
plt.ylim(-1,1)
plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2])
#将原来的x轴刻度改变一下  用列表列示
plt.yticks([-1,-0.5,0,0.5,1])
#将y轴的刻度也修改一下
plt.plot(data,np.sin(data))#画图形
plt.plot(data,np.cos(data))
plt.legend(['sin','cos'],loc = 'upper center',frameon = True,
           edgecolor = 'blue',facecolor = 'red')
#legend['sin','cos']默认的将自己放置在图像的合适位置 
#loc = 'upper center'上中位置  
#frameon加入了边框,后面的属性才有意义  边框edgecolor 默认灰色,此处为blue 前景色facecolor设置为红色
plt.savefig('6-6')
plt.show()

Matplotlib 的 Legend 图例就是为了帮助我们展示每个数据对应的图像名称,更好的让读者认识到你的数据结构。关于plt.legend()的说明如下: 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’

0:“最佳” 1:“右上角” 2:“左上角” 3:“左下角” 4:“右下角” 5:“对” 6:“中左” 7:“中间偏右” 8:“下中心” 9:“上中心” 10:“中心”

查看matplotlib的rc参数

pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数。

在pyplot中几乎所有的默认属性都是可以控制的,例如视图窗口大小以及每英寸点数、线条宽度、颜色和样式、坐标轴、坐标和网格属性、文本、字体等。

两种方式可以设置参数,即全局参数定制和rc设置方法。

In [17]:

import matplotlib as mpl
print(mpl.rc_params())
1、使用参数字典
import matplotlib as plt
print(plt.rc_params())
参数众多
常用参数:
Axes:设置坐标轴边界、颜色、坐标刻度值大小和网格的显示;
Figure:设置边界颜色、图形大小和子区;
Font:设置字号、字体和样式;
Grid:设置网格颜色和线型;
Legend:设置图例和其中的文本显示;
Lines:设置线条颜色、宽度、线型等;
Savefig:对保存图像进行单独设置;
Xtick和ytick:X、Y轴的主刻度和次刻度设置颜色、大小、方向和标签大小。

例6-7查看用户的配置文件目录

In [18]:

#全局参数定制
print(mpl.matplotlib_fname())
#显示当前用户的配置文件目录
#查找到当前用户的配置文件目录,然后用编辑器打开,修改matplotlibrc文件,即可修改配置参数。
C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc

1、线条的常用rc参数名称、解释和取值:
lines.linewidth:【线条宽度】取0-10之间的数值,默认为1.5。lines.linestyle:【线条样式】可取“-”“--”“-.”“:”四种。默认为“-”。
lines.marker:【线条上点的形状】可取“o” “D” “h” “.” “,”“S”等20种,默认为None。lines.markersize:【点的大小】取0-10之间的数值,默认为1。
2、常见线条类型解释:
linestyle取值  意义
-          实线
-.         点线
--         长虚线
:          短虚线
3、marker取值以及意义:
‘o’圆圈   ‘.’点   ‘D’菱形   ‘s’正方形    ‘h’六边形1  ‘*’星号  ‘H’六边形2  ‘d’小菱形   ‘-’水平线   ‘v’一角朝下的三角形   ‘8’八边形  ‘<’一角朝左的三角形  ‘p’五边形  ‘>’一角朝右的三角形  ‘,’像素   ‘^’一角朝上的三角形   ‘+’加号    ‘\’竖线     ‘None’无          ‘x’X

例6-8 rc参数设置示例1

由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改axes.unicode_minus参数。

除了设置线条和字体的rc参数外,还有设置文本、箱线图、坐标轴、刻度、图例、标记、图片、图像保存等rc参数。具体参数与取值可以参考官方文档。

In [6]:

fig,ax = plt.subplots()
plt.rcParams['font.family'] = ['SimHei']#如果不加文字显示出错
plt.rcParams['axes.unicode_minus'] = False
#更改字体后,会导致坐标轴中的部分字符无法显示,所有要设置这个参数
def f(t):
    return np.cos(2 * np.pi * t)#cos(2Πt)
x1 = np.arange(0.0,4.0,0.5)#8个数【给出的是步长】
x2 = np.arange(0.0,4.0,0.01)#400个数
plt.subplot(221)#创建子图
plt.plot(x1,f(x1),'bo',x2,f(x2),'k')#b是颜色 o是形状为圆圈  k指的是颜色
plt.title('子图1')#线是x2,点是x1对应的8个点
plt.subplot(222)
plt.plot(np.cos(2 * np.pi*x2),'r--')#r表示颜色 --表示为长虚线
plt.title('子图2')
plt.show()

plot()函数设置颜色的一些简写: b——蓝色 m——品红 g——绿色 y——黄色 r——红色 k——黑色 c——青色 w——白色

例6-9 rc参数设置示例2

In [23]:

fig = plt.figure()
ax = fig.add_subplot(111)#一行一列的子图
#ax.plot(np.random.randn(30).cumsum(),'y--')#直接不加具体的设置,直接写出来
ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = 'o',label = 'one')
#.random.randn(30)产生随机的正态分布的30个数  .cumsum()累加和  linestyle = 'dashed'
ax.plot(np.random.randn(30).cumsum(),color = 'c',linestyle = 'dashed',marker = '+',label = 'two')
ax.plot(np.random.randn(30).cumsum(),color = 'r',linestyle = 'dashed',marker = 'v',label = 'three')
ax.legend(loc = 'best')#标注
#ax.set_xticks([0,5,10,15,20,25,30,35])#刻度的设置
ax.set_xticklabels(['x1','x2','x3','x4','x5'],rotation = 30,fontsize = '20')
#rotation是x坐标轴的角度,默认为0   fontsize = '20'字体大小为20,默认的为large,xx-small【最小的】,small
plt.show()
C:\Users\Administrator\AppData\Local\Temp\ipykernel_12420\2762614236.py:8: UserWarning: FixedFormatter should only be used together with FixedLocator
  ax.set_xticklabels(['x1','x2','x3','x4','x5'],rotation = 30,fontsize = '20')

调用函数fill_between() 实现曲线下面部分的填充: x:第一个参数表示覆盖的区域x,表示整个x都覆盖 0:表示覆盖的下限 y:表示覆盖的上限是y这个曲线 facecolor:覆盖区域的颜色 alpha:覆盖区域的透明度[0,1],其值越大,表示越不透明

例6-12 使用fill_between填充区域

In [25]:

x = np.linspace(0,1,500)
#生成指定范围的一维数组【给出的是生成的数的个数】  生成0-1【包含1】的500个数
y = np.sin(3 * np.pi * x) * np.exp(-4 * x)#对x的衰减函数
fig,ax = plt.subplots()
plt.plot(x,y)#绘制x、y
plt.fill_between(x,0,y,facecolor = 'red',alpha = 0.3)
plt.show()

例6-13 使用fill_between()填充部分区域

In [27]:

plt.plot(x,y)
plt.fill_between(x[15:300],0,0.4,facecolor = 'blue',alpha = 0.3)
#此处是指定了x的范围为15-300,指定y的范围为0-0.4

Out[27]:

<matplotlib.collections.PolyCollection at 0x18898e4b0d0>

例6-14 使用fill_between()填充曲线之间的区域

In [29]:

x = np.linspace(0,1,500)
y1 = np.sin(3 * np.pi * x) * np.exp(-4 * x)
y2 = y1+0.2
plt.plot(x,y1,'b')
plt.plot(x,y2,'r')
plt.fill_between(x,y1,y2,facecolor = 'green',alpha = 0.3)
#此处是y1到y2的填充
plt.show()

例6-15 使用fill进行绘图的填充

In [30]:

x = np.linspace(0,1,500)
y = np.sin(3 * np.pi * x) * np.exp(-4 * x)
plt.plot(x,y)
plt.fill(x,y)
plt.show()

例6-16 在绘图中显示公式

绘图时有时需要在图表中加文本注解,这时可以通过text函数在指定的位置(x,y)加入文本注解。

In [33]:

plt.xlim([1,8])
plt.ylim([1,3])#创建刻度范围
plt.text(2,2,r'$ \alpha \beta \pi \lambda \omega $',size = 15)
#前面两个数字表示位置,$ $符号算是将书写的文本括起来,需要转义的都要用斜杠表示出来
plt.text(4,2,r'$ \sin(0)= \cos(\frac{\pi}{2}) $',size = 20)
#(\frac{\pi}{2})分数要用括号括起来,加一个反斜杠frac{}表示分数,分数的分子与分母要用{}括起来
#plt.text(,,r'$ \  $',size =)
plt.text(2,1.5,r'$ \lim_ {x \rightarrow y}\frac{1}{x^3} $',size =15,color = 'b')
#lim_当中_表示其下标,下标用{}括起来,x \rightarrow y 表示x向右的箭头【arrow】指向y
plt.text(5,1.5,r'$ \sqrt[4]{x} = \sqrt{y}  $',size =25)
#sqrt[4]{x}表示对x开四次方
plt.title(r'Title $ \sum_{n=1}^\infty'r'\frac{-e^{i\pi}}{2^n}$ !',fontsize =20)
#Title是正常的字符,所以不用加,sum_{n=1}表示从n=1开始求和,^\上标用此符号表示 ^\infty'表示无穷大,{i\pi}此处的反斜杠表示转义
plt.show()

如在柱状图上加入文本数字,可以清楚地显示每个类别的数量。如6个城市8月份的日均最高气温

In [5]:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei']
data = [25,30,32,34,34,23]
label = ['青海','兰州','北京','上海','广州','拉萨']
plt.xticks(range(len( data)),label)
plt.xlabel('城市')
plt.ylabel('温度')
plt.title('六城市8月份日均最高气温')
plt.bar(range(len( data)),data)#bar表示柱状图
for x,y in zip(range(len(data)),data):
    plt.text(x,y,y,ha = 'center',va = 'bottom')
    #x与y的位置上,对y处加数据,加在中间的靠下位置
plt.show()

例6-17 绘图中的文本注解示例

In [7]:

fig = plt.figure()
ax1 = fig.add_subplot(121)
t = np.arange(0.0,5,0.01)#生成500个等差数列
s = np.cos(2 * np.pi * t)
line = ax1.plot(t,s,lw = 2)#lw线宽为2,lw是linestyle的简写
bbox = dict(boxstyle = 'round',fc = 'white')#外框为round,前景色为白色
ax1.annotate('local max',xy = (2,1),xytext = (3,1.5),
             arrowprops = dict(facecolor = 'black',edgecolor = 'red',headwidth = 7,width = 2,bbox = bbox)
#'local max'是文本的内容,xy = (2,1)是箭头指向的点,xytext = (3,1.5)是文本位置
#dict字典的形式展现他的参数,headwidth = 7表示头部的宽度,width表示整个箭头的宽度,bbox = bbox【这个是我们自己定义的】表示其外框线【指的是箭头上面的外框】
#annotate箭头位置与文本位置都的书写
bbox_prop = dict(fc = 'white')
ax1.set_xlabel('asix-X',bbox = bbox_prop)
ax1.set_ylim(-2,2)#y的刻度范围
ax1.text(1,1,'max')#在(1,1)位置加一个max   text直接加文本,在这个里面也可以加边框
ax2 = fig.add_subplot(122)
ax2.set_ylim(-4,4)#坐标范围
ax2.set_xlim(-4,4)
bbox = dict(boxstyle = 'round',ec = 'red',fc = 'white')#fc前景色
#boxstyle = 'round'设置了圆角
ax2.text(-2,0,'$ y = sin(x) $',bbox = bbox)
ax2.text(0,-2,'$ y = cos(x) $',bbox = dict(boxstyle = 'square',facecolor = 'white',ec = 'black'),rotation = 45)
#'$ y = cos(x) $'先将cos加上  boxstyle = 'square'形状为方形circle为圆形round为圆角  rotation = 45为倾斜角度为45
ax2.grid(ls = ':',color = 'gray',alpha = 0.5)#ls是指线的样式color = 'gray'网格背景默认灰色
ax2.text(-2,2,'matplotlib',fontsize = 20,alpha = 0.3,color ='gray',
         bbox = dict(fc = 'white',boxstyle = 'round',edgecolor = 'gray',alpha = 0.3))
#水印效果的书写
plt.show()

折线图(line chart)是一种将数据点按照顺序连接起来的图形。可以看作是将散点图,按照x轴坐标顺序连接起来的图形。

折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间(根据常用比例设置)而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化。 plot()函数: x,y:接收array。表示x轴和y轴对应的数据。无默认。 color:接收特定string。指定线条的颜色。默认为None。 linestyle:接收特定string。指定线条类型。默认为“-”。 marker:接收特定string。表示绘制的点的类型。默认为None。 alpha:接收0-1的小数。表示点的透明度。默认为None。 matplotlib.pyplot.plot(args, *kwargs) plot函数在官方文档的语法中只要求填入不定长参数,实际可以填入的主要参数主要如下。

Series和DataFrame都有一个plot属性,用于绘制基本的图形。默认情况下,plot()绘制的都是折线。 Series和DataFrame都有一个plot属性,用于绘制基本的图形。默认情况下,plot()绘制的都是折线。

In [3]:

#Series的情况
import pandas as pd
s=pd.Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
s.plot()

Out[3]:

<AxesSubplot:>

In [4]:

#DataFrame的情况
s=pd.DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))
s.plot()

Out[4]:

<AxesSubplot:>

例6-18 plt.plot绘制拆线图示例

In [8]:

x = np.arange(9)#0-9的等差数列
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,marker = '*',linewidth = 1,linestyle = '--',color = 'orange')
plt.plot(x,z)
plt.title('matplotlib')
plt.xlabel('height',fontsize = 15)
plt.ylabel('width',fontsize = 15)
plt.legend(['Y','Z'],loc = 'upper center')#图例
plt.grid(True)#加网格
plt.show()

散点图(scatter diagram)又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。

值是由点在图表中的位置表示,类别是由图表中的不同标记表示,通常用于比较跨类别的数据。

scatter函数: matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None, **kwargs) x,y:接收array。表示x轴和y轴对应的数据。无默认。 s:接收数值或者一维的array。指定点的大小,若传入一维array则表示每个点的大小。默认为None。 c:接收颜色或者一维的array。指定点的颜色,若传入一维array则表示每个点的颜色。默认为None marker:接收特定string。表示绘制的点的类型。默认为None。 alpha:接收0-1的小数。表示点的透明度。默认为None。

例6-19 scatter绘图示例1

In [9]:

fig,ax = plt.subplots()
plt.rcParams['font.family'] = ['SimHei']#文字
plt.rcParams['axes.unicode_minus'] = False#坐标轴显示
x1 = np.arange(1,30)#序列
y1 = np.sin(x1)
ax1 = plt.subplot(111)
plt.title('散点图')
plt.xlabel('X')
plt.ylabel('Y')
lvalue = x1
ax1.scatter(x1,y1,c = 'r',s = 100,linewidths = lvalue,marker = 'o')
#c是颜色 s是点的大小  linewidths = lvalue指的是不同的宽度的值  marker
plt.legend('x1')
plt.show()

例6-20 scatter绘图示例2

In [10]:

fig,ax = plt.subplots()
for color in ['red','green','blue']:#颜色从给出的里面选择
    n = 500
    x,y = np.random.randn(2,n)#正太随机分布的500个数
    ax.scatter(x,y,c = color,label = color,alpha = 0.3,edgecolors = 'none')#edgecolors = 'none'没有边缘的颜色
    ax.legend()#图例
    ax.grid(True)
    #plt.show()

直方图(Histogram)又称质量分布图,是统计报告图的一种,由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,纵轴表示数量或者占比。

用直方图可以比较直观地看出产品质量特性的分布状态,便于判断其总体质量分布情况。直方图可以发现分布表无法发现的数据模式、样本的频率分布和总体的分布。

bar函数: matplotlib.pyplot.bar(left,height,width = 0.8,bottom = None,hold = None,data = None,** kwargs ) left:接收array。表示x轴数据。无默认。 height:接收array。表示x轴所代表数据的数量。无默认。 width:接收0-1之间的float。指定直方图宽度。默认为0.8。 color:接收特定string或者包含颜色字符串的array。表示直方图颜色。默认为None。

例6-21 bar绘图示例1

In [50]:

fig,axes = plt.subplots(2,1)#两行一列的图
data = pd.Series(np.random.randn(16),index = list('abcdefghijklmnop'))
#16个字符的字符串,变成列表
data.plot.bar(ax = axes[0],color = 'k',alpha = 0.7)#bar竖向的图 ax = axes[0]是0轴赋给x轴
data.plot.barh(ax = axes[1],color = 'k',alpha = 0.7)#barh横向的图  透明度为0.7
plt.show()

在dataframe中,柱状图将每一行中的值分组到并排的柱子中的一组。

例6-22 bar绘图示例2

In [53]:

fig,ax = plt.subplots()
x = np.arange(1,6)#1-5
Y1 = np.random.uniform(1.5,1.0,5)#y值由1.5-1.0
Y2 = np.random.uniform(1.5,1.0,5)
plt.bar(x,Y1,width = 0.35,facecolor = 'lightskyblue',edgecolor = 'red')#加了红色的边框
plt.bar(x+0.35,Y2,width = 0.35,facecolor  = 'yellowgreen',edgecolor = 'black')#向右移动0.35
plt.show()

In [5]:

df=pd.DataFrame(np.random.rand(6,4),index=['one','two','three','four','five','six'],columns=pd.Index(['A','B','C','D'],name='Genus'))
df.plot.bar()

Out[5]:

<AxesSubplot:>

饼图(Pie Graph)是将各项的大小与各项总和的比例显示在一张“饼”中,以“饼”的大小来确定每一项的占比。

饼图可以比较清楚地反映出部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于总数的大小,而且显现方式直观。 pie函数: matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, … ) 参数说明: x:接收array。表示用于绘制撇的数据。无默认。 autopct:接收特定string。指定数值的显示方式。默认为None。 explode:接收array。表示指定项离饼图圆心为n个半径。默认为None。 pctdistance:接收float。指定每一项的比例和距离饼图圆心n个半径。默认为0.6。 labels:接收array。指定每一项的名称。默认为None。 labeldistance:接收float。指定每一项的名称和距离饼图圆心多少个半径。默认为1.1。 color:接收特定string或者包含颜色字符串的array。表示饼图颜色。默认为None。 radius:接收float。表示饼图的半径。默认为1。

例6-23 pie绘制示例

In [6]:

plt.figure(figsize = (6,6))
labels = ['Spring','Summer','Autumn','Winter']
x = [15,30,45,10]#绘制的数据
explode = [0.05,0.05,0.05,0.05]#圆心的距离,控制分离的距离
plt.pie(x,labels = labels,explode = explode,startangle = 60,autopct = '%1.1f%%')
#startangle = 60  角度转60度  autopct = '%1.1f%%'数据的显示方式
plt.title('Rany days by season')
plt.axis('equal')#正圆形的
plt.show()

箱线图(boxplot)也称箱须图,其绘制需使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同特征时,更可表现其分散程度差异。

箱线图利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据,它也可以粗略地看出数据是否具有对称性、分布的分散程度等信息,特别可以用于对几个样本的比较。 boxplot函数: matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None,meanline=None, labels=None, … ) 参数说明: x:接收array。表示用于绘制箱线图的数据。无默认。 positions:接收array。表示图形位置。默认为None。 notch:接收boolean。表示中间箱体是否有缺口。默认为None。 widths:接收scalar或者array。表示每个箱体的宽度。默认为None。 sym:接收特定sting。指定异常点形状。默认为None。 labels:接收array。指定每一个箱线图的标签。默认为None。 vert:接收boolean。表示图形是横向纵向或者横向。默认为None。 meanline:接收boolean。表示是否显示均值线。默认为False。

例6-24 boxplot绘图示例

In [56]:

#从上到下依次为:上边缘、上四分位数、中位数、下四分位数、下边数
np.random.seed(2)
df = pd.DataFrame(np.random.rand(5,4),columns = ['A','B','C','D'])
df.boxplot()
plt.show()

概率图模型是图灵奖获得者Pearl提出的用来表示变量间概率依赖关系的理论。 正态分布又名高斯分布。 正态概率密度函数 normpdf(X,mu,sigma) 其中,x为向量,mu为均值,sigma为标准差。

In [11]:

from scipy.stats import norm#scipy科学计算库
fig,ax = plt.subplots()
np.random.seed(1587554)#随机种子
mu = 100#均值
sigma = 15#标准差
x = mu + sigma * np.random.randn(437)#序列
num_bins = 50
#https://blog.csdn.net/playgoon2/article/details/77930013
n,bins,patches = ax.hist(x,num_bins,density = 1)#density = 1密度为1
y = norm.pdf(bins,mu,sigma)#norm.pdf正太概率密度函数
ax.plot(bins,y,'--')#bins是直方图
#fig.tight_layout()#自动调整子图参数,使之自动填充到整个图像的区域
plt.show()

hist函数的补充 Matplotlib.pyplot中hist()的参数: n, bins, patches = plt.hist(arr, bins=10, normed=0,facecolor='black', edgecolor='black',alpha=1,histtype='bar') hist的参数非常多,但常用的就这六个 arr: 需要计算直方图的一维数组 bins: 直方图的柱数,可选项,默认为10 normed: 是否将得到的直方图向量归一化。默认为0 facecolor: 直方图颜色 edgecolor: 直方图边框颜色 alpha: 透明度 histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’ 返回值 : n: 直方图向量,是否归一化由参数normed设定 bins: 返回各个bin的区间范围 patches: 返回每个bin里面包含的数据,是一个list

例6-26 绘制某学生成绩信息的雷达图【星图】

In [61]:

courses = ['数据结构','数据可视化','高数','英语','软件工程','组成原理','C语言','体育']
scores = [82,95,78,85,45,88,76,88]
dataLength = len(scores)#求数据长度
angles = np.linspace(0,2 * np.pi,dataLength,endpoint = False)#endpoint = False结束点不连接
scores.append(scores[0])#加上数据
angles = np.append(angles,angles[0])#角度这一块加上
plt.polar(angles,scores,'rv--',linewidth = 2)
plt.thetagrids(range(0,360,int(360/dataLength)),courses,fontproperties = 'simhei',fontsize = 12)
#thetagrids网格数据的添加  range的范围为0-360  角度为360/8  名称加上 只在现有的里面设置字体
plt.fill(angles,scores,facecolor = 'r',alpha =0.2)
plt.show()

例6-27 流向图绘制

np.mgrid[ 第1维,第2维 ,第3维 , …] 功能:返回多维结构,常见的2D图形,3D图形 第n维的书写形式为:a:b:c c表示步长,为实数表示间隔;该为长度为[a,b),左开右闭 或:a:b:cj cj表示步长,为复数表示点数;该长度为[a,b],左闭右闭

In [12]:

#https://blog.csdn.net/yangxue_mifen/article/details/116429040
Y,X = np.mgrid[-3:3:100j,-3:3:100j]#二维图形
U = -1 -X ** 2 +Y
V = 1 + X - Y ** 2
speed = np.sqrt(U * U + V * V)sqrt#【平方根】
#https://www.csdn.net/tags/OtDaUg0sNDAxMjYtYmxvZwO0O0OO0O0O.html
plt.streamplot(X,Y,U,V,color = U,linewidth = 2,cmap = plt.cm.nipy_spectral)
#streamplot流向图,四个点  
#cmap = plt.cm.Spectral【颜色风格】实现的功能是给label为1的点一种颜色,给label为0的点另一种颜色。改变颜色值的风格
plt.colorbar()
f,(ax1,ax2) = plt.subplots(ncols = 2)#两个小图  ncols = 2表示两列  坐标轴纵向
ax1.streamplot(X,Y,U,V,density = [0.5,1])#density密度横向的密度降低
lw = 5 * speed/speed.max()#默认的蓝色
ax2.streamplot(X,Y,U,V,density = 0.6,color = 'k',linewidth = lw)#此处的颜色只有黑色 lw线宽流速越高线越粗,流速越低线越细
plt.show()

例6-28 在绘图中显示数据表格

In [8]:

data = [[66386,174296,75131,577908,32015],
         [58230,381139,78045,99308,160454],
         [89135,80552,152558,497981,603535],
         [78415,81858,150656,193263,69638],
         [139361,331509,343164,781380,52269]]#二维数组
columns = ('Freeze','Wind','Flood','Quake','Hail')#列标签
rows = ['%d year'% x for x in (100,50,20,10,5)]#列表表达式写出来
values = np.arange(0,2500,500)
value_increment = 1000#增量1000
colors = plt.cm.BuPu(np.linspace(0,0.5,len(columns)))#BuPu颜色值设置值,按照步长设置
n_rows = len(data)
index = np.arange(len(columns)) + 0.3#0.3为横向的偏移量
bar_width = 0.4#珠子的宽度为0.4
y_offset = np.array([0.0] * len(columns))#偏移量的设置 是一个数组 对columns求长度
cell_text = []#空列表
for row in range(n_rows):#row循环的范围为data的长度
    plt.bar(index,data[row],bar_width,bottom = y_offset)#绘图  顶部是data里面的row  宽度,下标  图像堆叠
    y_offset = y_offset + data[row]
    cell_text.append(['% 1.1f'%(x/1000.0) for x in y_offset])
    #cell_text为空,往里面加入数据  y_offset除1000
colors = colors[::-1]#表格颜色逆置
cell_text.reverse()#表格数据逆置
the_table = plt.table(cellText = cell_text,rowLabels = rows,rowColours = colors,colLabels = columns,
 loc ='bottom')#loc ='bottom'是下面的参数  cell_text是y_offset将data里面的数据累加的值  rowColours = colors颜色序列
plt.subplots_adjust(left = 0.2,bottom = 0.2)#subplots_adjust调整下方表格的疏密程度 数值>0紧凑,<0宽松
plt.ylabel("Loss in ${0}'s".format(value_increment))#${0}以1000作为他的分割
plt.yticks(values * value_increment,['% d '% val for val in values])#当前的刻度×1000
plt.xticks([])#x去掉刻度
plt.title('气象灾害损失')
plt.show()

In [11]:

r = np.linspace(0,2,100)#0-2的100个数据
theta = 2 * np.pi * r#角度2Πr
fig = plt.figure(figsize = (13,4))
ax1 = plt.subplot(121,projection = 'polar')#一行两列  projection = 'polar'将普通坐标修改为极坐标
ax1.scatter(theta,r,label = 'Polar Projection',s = 10)#s是点的大学
#https://blog.csdn.net/chichoxian/article/details/101058046
ax1.legend(bbox_to_anchor = (.85,1.35))
#0.85说的是数据结束的位置,极坐标当中1.35是外面
ax2 = plt.subplot(122)#这个图是一般情况下的
ax2.scatter(theta,r,label = 'plannar Projection',s =10)
ax2.legend(bbox_to_anchor = (0.7,1.35))
ax2.set_xlabel('R')
ax2.set_ylabel(r'$ \theta $')#横纵轴名称

Out[11]:

Text(0, 0.5, '$ \\theta $')

legend 是放置在我们的坐标边界里面的一个东西,主要的作用就是解释一下我们坐标轴里面的图形的含义(比如说针对x, y 对应的函数表达式,或者是曲线的意义(函数表达式)),legend 在英语里面的含义就是图示的说明。就是我们下面那个小盒子里面的三个函数的注释说明,表明每个函数是什么样的曲线等等。 可以在plt.legend 里面使用 loc 这个参数来设置我们的摆放的位置。e.g. loc=“upper right”, 就放置在我们的边界盒子(bounding box)(注释:就是坐标轴的边界)里面的右上方 ,默认的设置就是坐标轴边界的设置 (0,0)(1,1) 注解边界的默认设置就是(x0,y0,width,height)=(0,0,1,1). 为了把这个legend 放置在我们的坐标轴边界的外部,我们,我们需要借助一个特殊的元祖(x0,y0),比如说放置在坐标轴边界的右下部。 最常用的方法就是下面这个 plt.legend(loc=(1.04,1)) 1这里的loc指的是我们的legend的左下角的那个顶点的坐标。这个是比较简单直接的方式 此外,我们有一些通用的方法来手动的设置我们的legend box 放置的地方,那就是使用我们的bbox_to_anchor这个参数,在这里我们可以只提供bbox 的一个参数来作为限制就是提供 (x0,y0),它所处的方向就有loc 这个参数来提供 plt.legend(bbox_to_anchor=(1.04,1), loc="upper left") 1那么就是横坐标是1,纵坐标是0,但是要多出来一点那我们就设置为1.04,0 , 这个loc决定的是放置在我们legend的这个边框的那个部位。loc = "lower left"就是知识我们这个anchor的放置的位置,就是在我们legend(注解)边框的着陆点。

In [10]:

from wordcloud import WordCloud,STOPWORDS
import PIL.Image as image#默认矩形,有想要的形状可以加入图片
def get_wordList():
    f = open('text.txt')
    wordList = f.read()
    return wordList
def get_wordClound(mylist):
    pic_path = 'myimg.jpg'#注意路径
    img_mask = np.array(image.open(pic_path))#图片解码 
    wordcloud = WordCloud(background_color = "white",mask = img_mask).generate(mylist)
    #mask = img_mask掩码 generate(mylist)获取数据
    plt.imshow(wordcloud)
    plt.axis("off")#去除坐标轴
wordList = get_wordList()
get_wordClound(wordList)

本章实训 实训1 按样图,写出相应的代码

In [17]:

fig = plt.figure()
ax1 = fig.add_subplot(121)
t = np.arange(0.0,5,0.01)
s = np.sin(2 * np.pi * t)
ax1.plot(t,s,lw = 2)
ax1.set_ylim(-2,2)
bbox = dict(boxstyle = 'round',fc = 'white')
plt.annotate('local max',xy =(2.3,1),xytext = (3,1.5),bbox = bbox,arrowprops = dict(facecolor ='black',edgecolor = 'red',headwidth = 7,width = 2))
ax1.set_ylabel('Y',fontsize = 12)
ax1.set_xlabel('x',fontsize = 12)
ax1.text(1,1.2,'max',fontsize = 18)
bbox = dict(fc = 'white')
ax1.text(1.2,-1.8,'$y = sin(2 * np.pi * t)$',bbox = bbox,rotation = 10,alpha = 0.8)
ax2 = fig.add_subplot(122)
x = np.linspace(0,10,200)
y = np.sin(x)
ax2.plot(x,y,linestyle = '-.',color = 'purple')
ax2.annotate('Here I am',xy = (4.8,np.sin(4.8)),xytext = (3.7,-0.2),weight = 'bold',color = 'k',arrowprops = dict(arrowstyle = '-|>',connectionstyle = 'arc3',color = 'red'),bbox = dict(boxstyle = 'round',fc = 'yellow',ec = 'k',lw = 1,pad = 0.5,alpha = 0.8))
ax2.set_ylim(-1.5,1.5)
ax2.set_xlim(0,10)
ax2.text(6,-1.9,'$y = sin(x)$',bbox = dict(boxstyle = 'square',facecolor = 'white',ec = 'black'))
ax2.grid(ls = ':',color = 'gray',alpha = 0.5)
ax2.text(4.5,1,'NWNU',fontsize = 15,alpha = 0.3,color = 'gray',bbox = dict(fc = 'white',boxstyle = 'round',edgecolor = 'gray',alpha = 0.3))
plt.show()

In [12]:

#获取数据
starbucks = pd.read_csv('directory.csv')
starbucks.head()

Out[12]:

BrandStore NumberStore NameOwnership TypeStreet AddressCityState/ProvinceCountryPostcodePhone NumberTimezoneLongitudeLatitude
0Starbucks47370-257954Meritxell, 96LicensedAv. Meritxell, 96Andorra la Vella7ADAD500376818720GMT+1:00 Europe/Andorra1.5342.51
1Starbucks22331-212325Ajman Drive ThruLicensed1 Street 69, Al JarfAjmanAJAENaNNaNGMT+04:00 Asia/Dubai55.4725.42
2Starbucks47089-256771Dana MallLicensedSheikh Khalifa Bin Zayed St.AjmanAJAENaNNaNGMT+04:00 Asia/Dubai55.4725.39
3Starbucks22126-218024Twofour 54LicensedAl Salam StreetAbu DhabiAZAENaNNaNGMT+04:00 Asia/Dubai54.3824.48
4Starbucks17127-178586Al Ain TowerLicensedKhaldiya Area, Abu Dhabi IslandAbu DhabiAZAENaNNaNGMT+04:00 Asia/Dubai54.5424.51

3.数据分析及可视化 (1)查看星巴克旗下有哪些品牌。如果我们只关心星巴克咖啡门店,则只需获取星巴克中 Brand的数据 集,并查看全世界一共有多少家星巴克门店

In [13]:

print("星巴克旗下品牌有:\n",starbucks.Brand.value_counts())
coffee = starbucks[starbucks.Brand == 'Starbucks']
print("\n",coffee.shape)
星巴克旗下品牌有:
 Starbucks                25249
Teavana                    348
Evolution Fresh              2
Coffee House Holdings        1
Name: Brand, dtype: int64

 (25249, 13)

(2)查看全世界一共有多少个国家和地区开设了星巴克门店,显示门店数量排名前10和后10的国家和地区

In [14]:

df = starbucks.groupby(['Country']).size()
print("全世界一共有多少个国家和地区开设了星巴克门店:",df.size)
df1 = df.sort_values(ascending = False)
print("排名前10的国家和地区:\n",df1.head(10))
print("\n排名后10的国家和地区:\n",df1.tail(10))
全世界一共有多少个国家和地区开设了星巴克门店: 73
排名前10的国家和地区:
 Country
US    13608
CN     2734
CA     1468
JP     1237
KR      993
GB      901
MX      579
TW      394
TR      326
PH      298
dtype: int64

排名后10的国家和地区:
 Country
BO    4
AZ    4
TT    3
ZA    3
SK    3
CW    3
AW    3
MC    2
LU    2
AD    1
dtype: int64

(3)用核状图绘制排名前10的分布情况

In [15]:

plt.rcParams['font.size'] = 15
df1.head(10).plot(kind = 'bar',rot = 0)
plt.title('星巴克门店数排名前10的国家和地区')
plt.ylabel('Store Counts')
plt.xlabel('Countries and Regions')
plt.show()

(4)显示拥有星巴克门店数量排名前10的城市

In [16]:

count_starbucks_city = coffee.City.value_counts()
print("星巴克门店数量排名前10的城市:\n",count_starbucks_city.head(10))
star = starbucks.dropna(how = 'any',subset = ['City'])
count_starbucks_city = star.City.value_counts()
print("星巴克门店数量排名前10的城市:\n",count_starbucks_city.head(10))
星巴克门店数量排名前10的城市:
 上海市            542
Seoul          243
北京市            234
New York       230
London         215
Toronto        186
Mexico City    180
Chicago        179
Las Vegas      153
Houston        151
Name: City, dtype: int64
星巴克门店数量排名前10的城市:
 上海市            542
Seoul          243
北京市            234
New York       232
London         216
Toronto        192
Chicago        180
Mexico City    180
Seattle        156
Las Vegas      156
Name: City, dtype: int64

(5)绘制星巴克门店数前10的城市分布柱状图

In [17]:

plt.figure(1,figsize = (8,6))
count_starbucks_city = star.City.value_counts()
city_top10 = count_starbucks_city.head(10)
city_top10.plot(kind = 'bar',rot = 30)
plt.title('拥有星巴克门店最多的10个城市')
plt.ylabel('Store Counts')
plt.xlabel('City')

Out[17]:

Text(0.5, 0, 'City')

(6)按照星巴克门店在中国的分布情况,统计排名前10的城市

In [18]:

import pinyin
df = star[star['Country'] == 'CN']
df1 = df.copy()
#下面语句将城市名改为小写
df1["City"] = df1["City"].apply(lambda x:x.lower())
#下面语句将城市名改为小写拼音,去掉"市"的拼音
df1["City"] = df1["City"].apply(lambda x:pinyin.get(x,format = 'strip',delimiter = "")[0:-3])
df1 = df1.groupby(['City']).size().sort_values(ascending = False)
df1.head(10)

Out[18]:

City
shanghai     542
beijing      234
hangzhou     117
shenzhen     113
guangzhou    106
hong k       104
chengdu       98
suzhou        90
nanjing       73
wuhan         67
dtype: int64

(7)绘制柱状图

In [19]:

df1.head(10).plot(kind = 'bar',rot = 30)
plt.title('中国拥有星巴克最多的10个城市')
plt.ylabel('Store Counts')
plt.xlabel('Cities')
plt.show()

(8)用饼状图显示星巴克门店的经营方式有哪几种

In [26]:

plt.figure(1,figsize = (8,6))
ownership = star['Ownership Type'].value_counts()
plt.title('星巴克门店所有权类型')
ownership.plot(kind = 'pie')

Out[26]:

<AxesSubplot:title={'center':'星巴克门店所有权类型'}, ylabel='Ownership Type'>

In [25]:

#课后题
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x,y1,"b-",lw = 2.5,label = "正弦sin()")
plt.plot(x,y2,"r-",lw = 2.5,label = "余弦cos()")
plt.xlim(x.min() * 1.5,x.max() * 1.5)#横向与纵向都加大1.5倍
plt.ylim(y1.min() *1.5,y1.max() * 1.5)
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$ -\pi$',r'$ -\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
#[-np.pi,-np.pi/2,0,np.pi/2,np.pi]这个只是表示数字,想用Π表示,必须将后面的写出来用公式表示
plt.yticks([-1,0,1])#刻度设置
plt.title("绘图实例之cos()&sin()",fontsize = 16,color = "green")
plt.text(2.1,-1.4,"python-matplotlib",fontsize = 16,color = 'purple')#描述性文字平移
ax = plt.gca()#坐标重新定位,加上名字
ax.spines['right'].set_color('none')#去掉右侧的线的颜色
ax.spines['top'].set_color('none')#去掉上侧的线的颜色
ax.xaxis.set_ticks_position('bottom')#选定x轴的下面坐标
ax.spines['bottom'].set_position(('data',0))#横坐标不动往上面移
ax.yaxis.set_ticks_position('left')#y轴重新定位
ax.spines['left'].set_position(('data',0))#将纵向的设置到0的位置 数据不变
plt.legend(loc = 'upper left',fontsize = 12)#将label显示出来
t1 = -np.pi
t2 = 2*np.pi/3
plt.scatter(t1,np.cos(t1),50,color = 'b')#设置t1点 蓝色的点
plt.scatter(t2,np.sin(t2),50,color = 'r')#设置t2点 红色的点
plt.annotate(r'$\sin(\frac{2\pi}{3}) = \frac{\sqrt{3}}{2}$',
             xy = (t2,np.sin(t2)),xycoords = 'data',xytext = (+10,+30),
             textcoords = 'offset points',fontsize = 14,
             arrowprops = dict(arrowstyle = "-",
                               connectionstyle = "arc 3,rad =0" ))
#做标记 箭头位置为sin(t2)处  xycoords是相对于data的坐标  
#xytext = (+10,+30)是相对与xycords 的位置,不加的话,会跑到图像的左下边
#offset points是有一个偏移量  arrowstyle = "-"连接方式为箭头,【补充:->还有一种-|>】连接的样式为弧形【arc 3】  rad =0角度为0
plt.annotate(r'$\cos(-\pi) = -1$',
             xy = (t1,np.cos(t1)),xycoords = 'data',xytext = (0,-40),
             textcoords = 'offset points',fontsize = 14,
             arrowprops = dict(arrowstyle = "-",
                               connectionstyle = "arc 3,rad =0" ))
​
for label in ax.get_xticklabels() + ax.get_yticklabels():#循环来设置字体的大小
    label.set_fontsize(14)
plt.fill_between(x,np.abs(x)< 0.5,y1,y1>0.5,color = 'g',alpha = 0.8)
#fill_between()设置阴影  此处x>-0.5并且要<0.5 y1的sin值要大于0.5
plt.fill_between(x,y2,where = (-2.5 < x) & (x < -0.5),color = 'purple' )
#加了一个where条件
plt.grid()
plt.show()

写在最后:

此处的数据是来源与我自己的数据,想要的宝子可以私信我要奥,也希望我写的博文能帮到你们。文章当中的图片由于一些原因无法展示,希望各位宝子可以见谅哈!各位宝子也可以自行验证

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小鱼༒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值