04- Matplotlib数据可视化详解 (数据库)
Matplotlib的亮点:
- import matplotlib.pyplot as plt # 导包
- plt.figure(figsize = (9, 6) , 设置图片大小
- plt. plot(x, y), 画图
- 绘制网格线: 线型, 颜色, 透明度
- plt.grid(linestyle= '--', color= 'green', alpha=0.75) # linestyle: 样式, color: 颜色, alpha: 透明度
- plt.axis(), 设置坐标轴范围
- plt.xlim() , 设置X轴范围
- plt.ylim(), 设置Y轴范围
- plt.xticks(np.arange(0,7,np.pi/2)) # 设置X轴刻度
- plt.yticks([-1,0,1]) # 设置Y轴刻度
- plt.title('正弦波'), 设置中文字体:
from matplotlib.font_manager import FontManager
# fm = FontManager()
# mat_fonts = set(f.name for f in fm.ttflist) # 遍历所有字体
# print(mat_fonts) # 获取电脑自带字体列表
plt.rcParams['font.sans-serif'] = 'Adobe Heiti Std' # 设置宋体,显示中文
plt.title('正弦波') # 设置标题
- plt.legend(['Sin','Cos']), 设置图例
- plt.savefig('./基础5.png', dpi = 100, facecolor = 'violet' ) 保存图片
第一部分 基础知识
在数据分析与机器学习中,Matplotlib算得上是最常用的可视化工具。Matplotlib 是 python 最著名的绘图库,它提供了一整套 API,十分适合绘制图表,或修改图表的一些属性,如字体、标签、范围等。
Matplotlib 是一个 Python 的 2D 绘图库,它交互式环境生成出版质量级别的图形。通过 Matplotlib这个标准类库,开发者只需要几行代码就可以实现生成绘图,折线图、散点图、柱状图、饼图、直方图、组合图等数据分析可视化图表。
第一节 图形绘制
- plt.figure() , 设置图片大小
- plt. plot(x, y), 画图
- plt.grid(), 绘制网格线
- plt.axis(), 设置坐标轴范围
- plt.xlim() , 设置X轴范围
- plt.ylim(), 设置Y轴范围
import numpy as np
import matplotlib.pyplot as plt
# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦
# 绘制线形图
# 调整尺寸
plt.figure(figsize=(9,6))
plt.plot(x,y)
# 继续调用plot绘制多条线形图
# 2、设置网格线
plt.grid(linestyle = '--',# 样式color = 'green',# 颜色alpha = 0.75) # 透明度
# 3、设置坐标轴范围
plt.axis([-1,10,-1.5,1.5])
plt.xlim([-1,10])
plt.ylim([-1.5,1.5])
第二节 坐标轴刻度、标签、标题
- plt.xticks(), 设置X轴刻度
- labels , 设置标签
- plt.rcParams(), 设置字体
- plt.title('正弦波') # 设置标题
import numpy as np
import matplotlib.pyplot as plt
# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦
plt.plot(x,y)
# 2、设置x轴y轴刻度
plt.xticks(np.arange(0,7,np.pi/2))
plt.yticks([-1,0,1])
# 3、设置x轴y轴刻度标签
_ = plt.yticks(ticks = [-1,0,1],labels=['min','0','max'],fontsize=20, ha='right')
font={'family':'serif','style':'italic','weight':'normal','color':'red','size':16}
_ = plt.xticks(ticks = np.arange(0,7,np.pi/2),# LaTex语法,输入格式为:r'$\sigma$' #其中的sigma对应于希腊字母的σlabels=['0',r'$\frac{\pi}{2}$',r'$\pi$',r'$\frac{3\pi}{2}$',r'$2\pi$'],fontsize = 20,fontweight = 'normal',color = 'red')
# 4、坐标轴标签,标题
plt.ylabel('y = sin(x)',rotation = 0,horizontalalignment = 'right',fontstyle = 'normal',fontsize = 20)
# 获取电脑上的字体库
from matplotlib.font_manager import FontManager
# fm = FontManager()
# mat_fonts = set(f.name for f in fm.ttflist) # 遍历所有字体
# print(mat_fonts) # 获取电脑自带字体列表
plt.rcParams['font.sans-serif'] = 'Adobe Heiti Std' # 设置宋体,显示中文
plt.title('正弦波') # 设置标题
第三节 设置图例
- plt.legend(['Sin','Cos']), 设置图例
import numpy as np
import matplotlib.pyplot as plt# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦
# 绘制线形图
# 调整尺寸
plt.figure(figsize=(9,6))
plt.plot(x,y)# 2、图例
plt.plot(x,np.cos(x)) # 余弦波
plt.legend(['Sin','Cos'],fontsize = 18,loc = 'center',ncol = 2,bbox_to_anchor = [0,1.05,1,0.2])
第四节 脊柱移动 (坐标轴移动)
- ax.spines[ 'left' ].set_position(('data',0)) # 坐标轴调整: 'left, bottom, top, right'
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi,np.pi,50)
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(9,6))
plt.plot(x,np.sin(x),x,np.cos(x))
ax = plt.gca() # 获取当前视图
# 右边和上面脊柱消失zz
ax.spines['right'].set_color('white')
ax.spines['top'].set_color('#FFFFFF')# 设置下面左边脊柱位置,data表示数据,axes表示相对位置0~1
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))plt.yticks([-1,0,1],labels=['-1','0','1'],fontsize = 18)
_ = plt.xticks([-np.pi,-np.pi/2,np.pi/2,np.pi],labels=[r'$-\pi$',r'$-\frac{\pi}{2}$',r'$\frac{\pi}{2}$',r'$\pi$'],fontsize = 18)
第五节 图片保存
- plt.savefig(), 保存图片
import numpy as np
import matplotlib.pyplot as plt
# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦波
plt.figure(linewidth = 4)
plt.plot(x,y,color = 'red')
plt.plot(x,np.cos(x),color = 'k') # 余弦波ax = plt.gca() # 获取视图
ax.set_facecolor('lightgreen') # 设置视图背景颜色
# 2、图例
plt.legend(['Sin','Cos'],fontsize = 18,loc = 'center',ncol = 2,bbox_to_anchor = [0,1.05,1,0.2])
# plt.tight_layout() # 自动调整布局空间,就不会出现图片保存不完整
plt.savefig('./基础5.png', # 文件名:png、jpg、pdfdpi = 100, # 保存图片像素密度facecolor = 'violet', # 视图与边界之间颜色设置edgecolor = 'lightgreen', # 视图边界颜色设置bbox_inches = 'tight') # 保存图片完整
第二部分 风格和样式
第一节 颜色、线形、点形、线宽、透明度
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,20)
y1 = np.sin(x)
y2 = np.cos(x)# 设置颜色,线型,点型
plt.plot(x,y1,color = 'indigo',ls = '-.',marker = 'p')
plt.plot(x,y2,color = '#FF00EE',ls = '--',marker = 'o')
plt.plot(x,y1 + y2,color = (0.2,0.7,0.2),marker = '*',ls = ':')
plt.plot(x,y1 + 2*y2,linewidth = 3,alpha = 0.7,color = 'orange') # 线宽、透明度
plt.plot(x,2*y1 - y2,'bo--') # 参数连用
第二节 更多属性设置
import numpy as np
import pandas as pd
def f(x):return np.exp(-x) * np.cos(2*np.pi*x)
x = np.linspace(0,5,50)
plt.figure(figsize=(9,6))
plt.plot(x,f(x),color = 'purple',marker = 'o',ls = '--',lw = 2,alpha = 0.6,markerfacecolor = 'red', # 点颜色markersize = 10,# 点大小markeredgecolor = 'green', # 点边缘颜色markeredgewidth = 3) # 点边缘宽度
plt.xticks(size = 18) # 设置刻度大小
plt.yticks(size = 18)
第三部分 多图布局
第一节 子视图
- plt.subplot(2, 2, 2) # 多图设置
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-np.pi,np.pi,50)
y = np.sin(x)# 子视图1
plt.figure(figsize=(9,6))
ax = plt.subplot(221) # 两行两列第一个子视图
ax.plot(x,y,color = 'red')
ax.set_facecolor('green') # 调用子视图设置方法,设置子视图整体属性
# 子视图2
ax = plt.subplot(2,2,2) # 两行两列第二个子视图
line, = ax.plot(x,-y) # 返回绘制对象
line.set_marker('*') # 调用对象设置方法,设置属性
line.set_markerfacecolor('red')
line.set_markeredgecolor('green')
line.set_markersize(10)
# 子视图3
ax = plt.subplot(2,1,2) # 两行一列第二行视图
plt.sca(ax) # 设置当前视图
x = np.linspace(-np.pi,np.pi,200)
plt.plot(x,np.sin(x*x),color = 'red')
第二节 嵌套
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-np.pi,np.pi,25)
y = np.sin(x)
fig = plt.figure(figsize=(9,6)) # 创建视图plt.plot(x,y)# 嵌套方式一,axes轴域(横纵坐标范围),子视图
ax = plt.axes([0.2,0.55,0.3,0.3]) # 参数含义[left, bottom, width, height]
ax.plot(x,y,color = 'g')# 嵌套方式二
ax = fig.add_axes([0.55,0.2,0.3,0.3]) # 使用视图对象添加子视图
ax.plot(x,y,color = 'r')
第三节 多图布局分格显示
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi)
# sharex:所有小图共享x轴 sharey:表示所有小图共享y轴 坐标轴以所有小图中范围最大的进行显示
fig, ((ax11,ax12,ax13), (ax21,ax22,ax23),(ax31,ax32,ax33)) = plt.subplots(3, 3)
# 也可通过plt.subplot() 一个个添加子视图
fig.set_figwidth(9)
fig.set_figheight(6)
ax11.plot(x,np.sin(x))
ax12.plot(x,np.cos(x))
ax13.plot(x,np.tanh(x))
ax21.plot(x,np.tan(x))
ax22.plot(x,np.cosh(x))
ax23.plot(x,np.sinh(x))
ax31.plot(x,np.sin(x) + np.cos(x))
ax32.plot(x,np.sin(x*x) + np.cos(x*x))
ax33.plot(x,np.sin(x)*np.cos(x))
# 紧凑显示,边框会比较小,可以注释掉该行查看效果
plt.tight_layout()
plt.show()
3.3.2 不均匀分布
方式一:
plt.subplot(3, 3, (4, 5)), 将4,5图 画到一块
import numpy as np
import matplotlib.pyplot as plt
# 需要导入gridspec模块
x = np.linspace(0,2*np.pi,200)
fig = plt.figure(figsize=(12,9))
# 使用切片方式设置子视图
ax1 = plt.subplot(3,1,1) # 视图对象添加子视图
ax1.plot(x,np.sin(10*x))
# 设置ax1的标题,xlim、ylim、xlabel、ylabel等所有属性现在只能通过set_属性名的方法设置
ax1.set_title('ax1_title') # 设置小图的标题
ax2 = plt.subplot(3,3,(4,5))
ax2.set_facecolor('green')
ax2.plot(x,np.cos(x),color = 'red')
ax3 = plt.subplot(3,3,(6,9))
ax3.plot(x,np.sin(x) + np.cos(x))
ax4 = plt.subplot(3,3,7)
ax4.plot([1,3],[2,4])
ax5 = plt.subplot(3,3,8)
ax5.scatter([1,2,3], [0,2, 4])
ax5.set_xlabel('ax5_x',fontsize = 12)
ax5.set_ylabel('ax5_y',fontsize = 12)
plt.show()
方式二:
- plt.subplot2grid((3, 3), (1, 0), colspan = 2)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,100)
plt.figure(figsize=(12,9))
# 子视图1
ax1 = plt.subplot2grid(shape = (3, 3),# 布局形状loc = (0, 0), # 布局绘制位置colspan=3) # 跨几列
ax1.plot(x,np.sin(10*x))
# 设置ax1的标题,xlim、ylim、xlabel、ylabel等所有属性现在只能通过set_属性名的方法设置
ax1.set_title('ax1_title') # 设置小图的标题
# 子视图2
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2) # 跨两列
ax2.set_facecolor('green')
ax2.plot(x,np.cos(x),color = 'red')
# 子视图3
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2) # 跨两行
ax3.plot(x,np.sin(x) + np.cos(x))
# 子视图4
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax4.plot([1,3],[2,4])
# 子视图5
ax5 = plt.subplot2grid((3, 3), (2, 1))
ax5.scatter([1,2,3], [0,2, 4])
ax5.set_xlabel('ax5_x',fontsize = 12)
ax5.set_ylabel('ax5_y',fontsize = 12)
方式三
- gs = gridspec.GridSpec(3, 3)
- plt.subplot(gs[1:, :2])
import numpy as np
import matplotlib.pyplot as plt
# 需要导入gridspec模块
import matplotlib.gridspec as gridspec
x = np.linspace(0,2*np.pi,200)
fig = plt.figure(figsize=(12,9))
# 将整个视图分成3x3布局
gs = gridspec.GridSpec(3, 3)
# 使用切片方式设置子视图
ax1 = fig.add_subplot(gs[0,:]) # 视图对象添加子视图
ax1.plot(x,np.sin(10*x))
# 设置ax1的标题,xlim、ylim、xlabel、ylabel等所有属性现在只能通过set_属性名的方法设置
ax1.set_title('ax1_title') # 设置小图的标题
ax2 = plt.subplot(gs[1, :2]) # 模块调用
ax2.set_facecolor('green')
ax2.plot(x,np.cos(x),color = 'red')
# 从第一行到最后,占1、2两行,后面的2表示只占用第二列,也就是最后的一列
ax3 = plt.subplot(gs[1:, 2])
ax3.plot(x,np.sin(x) + np.cos(x))
# 倒数第一行,只占第0列这一列
ax4 = plt.subplot(gs[-1, 0])
ax4.plot([1,3],[2,4])
# 倒数第一行,只占倒数第二列,由于总共三列,所以倒数第二列就是序号1的列
ax5 = plt.subplot(gs[-1, -2])
ax5.scatter([1,2,3], [0,2, 4])
ax5.set_xlabel('ax5_x',fontsize = 12)
ax5.set_ylabel('ax5_y',fontsize = 12)
plt.show()
第四节 双轴显示
- plt.rcParams , 字体设置
- ax1.twinx(), 创建镜像坐标
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-np.pi,np.pi,100)
data1 = np.exp(x)
data2 = np.sin(x)plt.figure(figsize=(9,6))
plt.rcParams['font.size'] = 16 # 设置整体字体大小ax1 = plt.gca() # 获取当前轴域ax1.set_xlabel('time (s)') # 设置x轴标签
ax1.set_ylabel('exp', color='red') # 设置y轴标签
ax1.plot(x, data1, color='red') # 数据绘制
ax1.tick_params(axis='y', labelcolor='red') # 设置y轴刻度属性ax2 = ax1.twinx() # 创建新axes实例,共享x轴,并设置
ax2.set_ylabel('sin', color='blue')
ax2.plot(x, data2, color='blue')
ax2.tick_params(axis='y', labelcolor='blue')plt.tight_layout() # 紧凑布局
第四部分 文本、注释、箭头
第一节 文本
import numpy as np
import matplotlib.pyplot as plt# 字体属性
font = {'fontsize': 20,'family': 'Adobe Heiti Std','color': 'red','weight': 'bold'}x = np.linspace(0.0, 5.0, 100)
y = np.cos(2*np.pi*x) * np.exp(-x)plt.figure(figsize=(9,6))
plt.plot(x, y, 'k')
plt.title('exponential decay',fontdict=font)
plt.suptitle('指数衰减',y = 1.05,fontdict = font,fontsize = 30)
plt.text(x = 2, y = 0.65, # 横纵坐标位置s = r'$\cos(2 \pi t) \exp(-t)$') # 文本内容
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.show()
第二节 箭头
import matplotlib.pyplot as plt
import numpyloc = np.random.randint(0,10,size = (10,2))
plt.figure(figsize=(10, 10))
plt.plot(loc[:, 0], loc[:, 1], 'g*', ms=20) # 画绿色的星星
plt.grid(True) # 框架线是否显示# 路径
way = np.arange(10)
np.random.shuffle(way)for i in range(0, len(way)-1):start = loc[way[i]]end = loc[way[i+1]]plt.arrow(start[0], start[1], end[0]-start[0], end[1]-start[1], # 坐标与距离head_width=0.2, lw=2,#箭头长度,箭尾线宽length_includes_head = True) # 长度计算包含箭头箭尾plt.text(start[0],start[1],s = i,fontsize = 18,color = 'red') # 文本if i == len(way) - 2: # 最后一个点plt.text(end[0],end[1],s = i + 1,fontsize = 18,color = 'red')
第三节 注释
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = np.arange(0.0, 5.0, 0.01)
y = np.cos(2*np.pi*x)
line, = ax.plot(x,y,lw=2)
ax.annotate('local max', # 文本内容xy=(2, 1), # 箭头指向位置xytext=(3, 1.5), # 文本位置arrowprops=dict(facecolor='black', shrink=0.05)) # 箭头
ax.annotate('local min',xy = (2.5,-1),xytext = (4,-1.8),arrowprops = dict(facecolor = 'black',width = 2, # 箭头宽度headwidth = 10,# 箭头头部宽度headlength = 10, # 箭头头部长度shrink = 0.1)) # 箭头两端收缩的百分比(占总长)
ax.annotate('median',xy = (2.25,0),xytext = (0.5,-1.8),arrowprops = dict(arrowstyle = '-|>'), # 箭头样式fontsize = 20)
ax.set_ylim(-2, 2)
第四节 注释箭头连接形状
- ax.annotate() # 注释
import matplotlib.pyplot as pltdef annotate_con_style(ax, connectionstyle):x1, y1 = 3,2x2, y2 = 8,6ax.plot([x1, x2], [y1, y2], ".")ax.annotate('',xy=(x1, y1), # 相当于B点,arrow headxytext=(x2, y2), # 相当于A点,arrow tailarrowprops=dict(arrowstyle='->', color='red',shrinkA = 5,shrinkB = 5,connectionstyle=connectionstyle))ax.text(0.05, 0.95, connectionstyle.replace(",", "\n"),transform=ax.transAxes, # 相对坐标fontsize=9, ha="left", va="top")# 指定对齐方式# 常用箭头连接样式
fig, axs = plt.subplots(3, 5, figsize=(9,6))
# display(axs.shape,axs[0, 0])
annotate_con_style(axs[0, 0], "angle3,angleA=90,angleB=0")
annotate_con_style(axs[1, 0], "angle3,angleA=0,angleB=90")
annotate_con_style(axs[2, 0], "angle3,angleA = 0,angleB=150")
annotate_con_style(axs[0, 1], "arc3,rad=0.")
annotate_con_style(axs[1, 1], "arc3,rad=0.3")
annotate_con_style(axs[2, 1], "arc3,rad=-0.3")
annotate_con_style(axs[0, 2], "angle,angleA=-90,angleB=180,rad=0")
annotate_con_style(axs[1, 2], "angle,angleA=-90,angleB=180,rad=5")
annotate_con_style(axs[2, 2], "angle,angleA=-90,angleB=10,rad=5")
annotate_con_style(axs[0, 3], "arc,angleA=-90,angleB=0,armA=30,armB=30,rad=0")
annotate_con_style(axs[1, 3], "arc,angleA=-90,angleB=0,armA=30,armB=30,rad=5")
annotate_con_style(axs[2, 3], "arc,angleA=-90,angleB=0,armA=0,armB=40,rad=0")
annotate_con_style(axs[0, 4], "bar,fraction=0.3")
annotate_con_style(axs[1, 4], "bar,fraction=-0.3")
annotate_con_style(axs[2, 4], "bar,angle=180,fraction=-0.2")for ax in axs.flat:# 设置轴域刻度ax.set(xlim=(0, 10), ylim=(0, 10),xticks = [],yticks = [],aspect=1)
fig.tight_layout(pad=0.2)
第五部分 常用视图
第一节 折线图
- plt.plot(x, marker = '*', color = 'r') # 直接画
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randint(0,10,size = 15)
# 一图多线
plt.figure(figsize=(9,6))
plt.plot(x,marker = '*',color = 'r') # 折线图
plt.plot(x.cumsum(),marker = 'o')# 多图布局
fig,axs = plt.subplots(2,1)
fig.set_figwidth(9)
fig.set_figheight(6)
axs[0].plot(x,marker = '*',color = 'red')
axs[1].plot(x.cumsum(),marker = 'o')
第二节 柱状图
堆叠柱状图
- plt.bar()
import numpy as np
import matplotlib.pyplot as plt
labels = ['G1', 'G2', 'G3', 'G4', 'G5','G6'] # 级别
men_means = np.random.randint(20,35,size = 6)
women_means = np.random.randint(20,35,size = 6)
men_std = np.random.randint(1,7,size = 6)
women_std = np.random.randint(1,7,size = 6)
width = 0.35
plt.bar(labels, # 横坐标men_means, # 柱高width, # 线宽yerr=4, # 误差条label='Men')#标签
plt.bar(labels, women_means, width, yerr=2, bottom=men_means,label='Women')
plt.ylabel('Scores', fontsize = 12)
plt.title('Scores by group and gender', fontsize = 12)
plt.legend(fontsize = 12)
分组柱状图
- plt.bar()
import matplotlib
import matplotlib.pyplot as plt
import numpy as nplabels = ['G1', 'G2', 'G3', 'G4', 'G5','G6'] # 级别
men_means = np.random.randint(20,35,size = 6)
women_means = np.random.randint(20,35,size = 6)
x = np.arange(len(men_means))
plt.figure(figsize=(9,6))
rects1 = plt.bar(x - width/2, men_means, width) # 返回绘图区域对象
rects2 = plt.bar(x + width/2, women_means, width)# 设置标签标题,图例
plt.ylabel('Scores', fontsize = 12)
plt.title('Scores by group and gender', fontsize = 12)
plt.xticks(x,labels, fontsize = 9)
plt.legend(['Men','Women'], fontsize = 12)# 添加注释
def set_label(rects):for rect in rects:height = rect.get_height() # 获取高度plt.text(x = rect.get_x() + rect.get_width()/2, # 水平坐标y = height + 0.5, # 竖直坐标s = height, # 文本fontsize = 12, ha = 'center') # 水平居中set_label(rects1)
set_label(rects2)
plt.tight_layout() # 设置紧凑布局
plt.savefig('./分组带标签柱状图.png')
第三节 极坐标图
极坐标线形图:
- plt.subplot()
import numpy as np
import matplotlib.pyplot as pltr = np.arange(0, 4*np.pi, 0.01) # 弧度值
y = np.linspace(0,2,len(r)) # 目标值ax = plt.subplot(111,projection = 'polar',facecolor = 'lightgreen') # 定义极坐标
ax.plot(r, y,color = 'red')
ax.set_rmax(3) # 设置半径最大值
ax.set_rticks([0.5, 1, 1.5, 2]) # 设置半径刻度
ax.set_rlabel_position(-22.5) # 设置半径刻度位置
ax.grid(True) # 网格线ax.set_title("A line plot on a polar axis", va='center',ha = 'center',pad = 30)
极坐标柱状图:
- plt.subplot(, projection = ‘polar’) , 圆图,圈圈
import numpy as np
import matplotlib.pyplot as plt
N = 8 # 分成8份
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = np.random.randint(3,15,size = N)
width = np.pi / 4
colors = np.random.rand(8,3) # 随机生成颜色
ax = plt.subplot(111, projection='polar') # polar表示极坐标
ax.bar(theta, radii, width=width, bottom=0.0,color = colors)
第四节 直方图
- ax.hist() , 直方图
import numpy as np
import matplotlib.pyplot as pltmu = 100 # 平均值
sigma = 15 # 标准差
x = np.random.normal(loc = mu,scale = 15,size = 10000)
fig, ax = plt.subplots()n, bins, patches = ax.hist(x, 200, density=True) # 直方图# 概率密度函数
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *np.exp(-0.5 * (1 / sigma * (bins - mu))**2))
plt.plot(bins, y, '--')
plt.xlabel('Smarts', fontsize=12)
plt.ylabel('Probability density', fontsize=12)
plt.title(r'Histogram of IQ: $\mu=100$, $\sigma=15$', fontsize=12)# 紧凑布局
fig.tight_layout()
plt.savefig('./直方图.png')
第五节 箱形图
- plt.boxplot() ,箱形图
- 用来找异常值
import numpy as np
import matplotlib.pyplot as plt
data=np.random.normal(size=(500,4))
lables = ['A','B','C','D']
# 用Matplotlib画箱线图
plt.boxplot(data,1,'gD',labels=lables) # 红色的圆点是异常值
第六节 散点图
- 散点图的英文叫做 scatter plot,它将两个变量的值显示在二维坐标中,非常适合展示两个变量之间的关系.
- plt.scatter()
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(100,2)
s = np.random.randint(100,300,size = 100)
color = np.random.randn(100)
plt.scatter(data[:,0], # 横坐标data[:,1], # 纵坐标s = s, # 尺寸c = color, # 颜色alpha = 0.5) # 透明度
第七节 饼图
- plt.pie()
import numpy as np
import matplotlib.pyplot as plt
# 解决中文字体乱码的问题
matplotlib.rcParams['font.sans-serif']='Adobe Heiti Std' labels =["五星","四星","三星","二星","一星"] # 标签
percent = [95,261,105,30,9] # 某市星级酒店数量# 设置图片大小和分辨率
fig=plt.figure(figsize=(5,5), dpi=150)
# 偏移中心量,突出某一部分
explode = (0, 0.1, 0, 0, 0)
# 绘制饼图:autopct显示百分比,这里保留一位小数;shadow控制是否显示阴影
plt.pie(x = percent, # 数据explode=explode, # 偏移中心量labels=labels, # 显示标签autopct='%0.1f%%', # 显示百分比shadow=True) # 阴影,3D效果
plt.savefig("./饼图.jpg")
嵌套饼图
- plt.pie()
- 根据圆的半径进行拆分内外圆
import pandas as pd
import matplotlib.pyplot as plt
food = pd.read_excel('./food.xlsx')
# 分组聚合,内圈数据
inner = food.groupby(by = 'type')['花费'].sum()
outer = food['花费'] # 外圈数据
plt.rcParams['font.family'] = 'Kaiti SC'
plt.rcParams['font.size'] = 18
fig=plt.figure(figsize=(8,8))
# 绘制内部饼图
plt.pie(x = inner, # 数据radius=0.6, # 饼图半径wedgeprops=dict(linewidth=3,width=0.6,edgecolor='w'),# 饼图格式:间隔线宽、饼图宽度、边界颜色labels = inner.index, # 显示标签labeldistance=0.4) # 标签位置
# 绘制外部饼图
plt.pie(x = outer, radius=1, # 半径wedgeprops=dict(linewidth=3,width=0.3,edgecolor='k'),# 饼图格式:间隔线宽、饼图宽度、边界颜色labels = food['食材'], # 显示标签labeldistance=1.2) # 标签位置# 设置图例标题,bbox_to_anchor = (x, y, width, height)控制图例显示位置
plt.legend(inner.index,bbox_to_anchor = (0.9,0.6,0.4,0.4),title = '食物占比')
plt.tight_layout()
plt.savefig('./嵌套饼图.png',dpi = 200)
甜甜圈
- plt.pie()
import numpy as np
import matplotlib.pyplot as pltplt.figure(figsize=(6,6))
# 甜甜圈原料
recipe = ["225g flour","90g sugar","1 egg","60g butter","100ml milk","1/2package of yeast"]
# 原料比例
data = [225, 90, 50, 60, 100, 5]
wedges, texts = plt.pie(data,startangle=40)
bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72)
kw = dict(arrowprops=dict(arrowstyle="-"),bbox=bbox_props,va="center")for i, p in enumerate(wedges):ang = (p.theta2 - p.theta1)/2. + p.theta1 # 角度计算# 角度转弧度----->弧度转坐标y = np.sin(np.deg2rad(ang))x = np.cos(np.deg2rad(ang))ha = {-1: "right", 1: "left"}[int(np.sign(x))] # 水平对齐方式connectionstyle = "angle,angleA=0,angleB={}".format(ang) # 箭头连接样式kw["arrowprops"].update({"connectionstyle": connectionstyle}) # 更新箭头连接方式plt.annotate(recipe[i], xy=(x, y), xytext=(1.35*np.sign(x), 1.4*y),ha=ha,**kw,fontsize = 12,weight = 'bold')
plt.title("Matplotlib bakery: A donut",fontsize = 12,pad = 25)
plt.tight_layout()
第八节 热力图
- plt.imshow(harvest)
import numpy as np
import matplotlib
import matplotlib.pyplot as pltvegetables = ["cucumber", "tomato", "lettuce", "asparagus","potato", "wheat", "barley"]
farmers = list('ABCDEFG')harvest = np.random.rand(7,7)*5 # 农民丰收数据plt.rcParams['font.size'] = 18
plt.rcParams['font.weight'] = 'heavy'
plt.figure(figsize=(9,9))
im = plt.imshow(harvest)plt.xticks(np.arange(len(farmers)),farmers,rotation = 45,ha = 'right', fontsize=12)
plt.yticks(np.arange(len(vegetables)),vegetables, fontsize=12)# 绘制文本
for i in range(len(vegetables)):for j in range(len(farmers)):text = plt.text(j, i, round(harvest[i, j],1),ha="center", va="center", color='r', fontsize=12)
plt.title("Harvest of local farmers (in tons/year)",pad = 20, fontsize=12)
fig.tight_layout()
plt.savefig('./热力图.png')
第九节 面积图
- plt.stackplot()
import matplotlib.pyplot as plt
plt.figure(figsize=(9,6))
days = [1,2,3,4,5]
sleeping =[7,8,6,11,7]
eating = [2,3,4,3,2]
working =[7,8,7,2,2]
playing = [8,5,7,8,13]
plt.stackplot(days,sleeping,eating,working,playing)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Stack Plot',fontsize = 12)
plt.legend(['Sleeping','Eating','Working','Playing'],fontsize = 12)
第十节 蜘蛛图
- fig.add_subplot(, polar = True), 画圈极地图.
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Adobe Heiti Std'
labels=np.array(["个人能力","IQ","服务意识","团队精神","解决问题能力","持续学习"])
stats=[83, 61, 95, 67, 76, 88]
# 画图数据准备,角度、状态值
angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats=np.concatenate((stats,[stats[0]]))
angles=np.concatenate((angles,[angles[0]]))
# 用Matplotlib画蜘蛛图
fig = plt.figure(figsize=(9,9))
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, stats, 'o-', linewidth=2) # 连线
ax.fill(angles, stats, alpha=0.25) # 填充
# 设置角度
ax.set_thetagrids(angles*180/np.pi,#角度值labels,fontsize = 18)
ax.set_rgrids([20,40,60,80],fontsize = 18)
第六部分 3D图形
第一节 三维折线图散点图
- fig = plt.figure() , 二维图像, 定义图大小
- ax3 = Axes3D(fig) , 二维转三维
- ax3.plot() # 画图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D # 3D引擎x = np.linspace(0,60,300)
y = np.sin(x)
z = np.cos(x)fig = plt.figure(figsize=(9,6)) # 二维图形
ax3 = Axes3D(fig) # 二维变成了三维
ax3.plot(x,y,z) # 3维折线图
# 3维散点图
ax3.scatter(np.random.rand(50)*60,np.random.rand(50),np.random.rand(50),color = 'red',s = 100)
第二节 三维柱状图
- fig = plt.figure() , 二维图像, 定义图大小
- ax3 = Axes3D(fig) , 二维转三维
- ax3.bar()
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D # 3D引擎
month = np.arange(1,5)
# 每个月 4周 每周都会产生数据
# 三个维度:月、周、销量
fig = plt.figure(figsize=(9,6))
ax3 = Axes3D(fig)for m in month:ax3.bar(np.arange(4),np.random.randint(1,10,size = 4),zs = m ,zdir = 'x',# 在哪个方向上,一排排排列alpha = 0.7,# alpha 透明度width = 0.5)
ax3.set_xlabel('X',fontsize = 18,color = 'red')
ax3.set_ylabel('Y',fontsize = 18,color = 'red')
ax3.set_zlabel('Z',fontsize = 18,color = 'green')
相关文章:
04- Matplotlib数据可视化详解 (数据库)
Matplotlib的亮点: import matplotlib.pyplot as plt # 导包plt.figure(figsize (9, 6) , 设置图片大小plt. plot(x, y), 画图绘制网格线: 线型, 颜色, 透明度plt.grid(linestyle --, color green, alpha0.75) # linestyle: 样式, color: 颜色, alpha: 透明度plt.axis(…...
高性能MySQL -- 查询性能优化
一般来说一个好的程序:查询优化,索引优化,库表结构要同时进行优化。今天我们来讲一下查询优化。 我们需要对MySQL的架构有基本认知,所以这里贴一张图大家看看: 图片来自于《小林coding》 为什么从查询会慢࿱…...
Android Binder机制之一(简介)
目录 前言 一、Android 进程间通信方式 二、Binder架构图 三、Binder涉及角色 3.1 Binder驱动 3.2 Binder实体 3.3 Binder引用 3.4 远程服务 3.5 ServiceManager守护进程 四、涉及源码 前言 这是本人第N次看Binder 相关知识了,其实每次看都有新的收获&…...
《SOC芯片研究框架》深度科普,发展趋势、技术特点、产业链一文看懂
片上系统SoC(System on Chip),即在一块芯片上集成一整个信息处理系统,简单来说 SoC芯片是在中央处理器CPU的基础上扩展音视频功能和专用接口的超大规模集成电路,是智能设备的“大脑”。随着半导体工艺的发展࿰…...
WebRTC中的ICE
ICE简介 ICE是用于UDP媒体传输的NAT穿透协议(适当扩展也可以支持TCP),它需要利用STUN和TURN协议来完成工作。 STUN协议提供了获取一个内网地址对应的公网地址映射关系(NAT Binding)的机制,并且提供了它们…...
了解webpack
文章目录一、webpack是什么?二、为什么要使用webpack三、webpack的五个核心概念四、安装webpack提示:以下是本篇文章正文内容,下面案例可供参考 一、webpack是什么? 本质上,webpack 是一个用于现代 JavaScript 应用程…...
NoSQL数据库详细介绍
一、NoSQL发展历史 NoSQL 一词最早出现于 1998 年,是 Carlo Strozzi 开发的一个轻量、开源、不提供 SQL 功能的关系数据库。 2009 年,Last.fm 的 Johan Oskarsson 发起了一次关于分布式开源数据库的讨论,来自 Rackspace 的 Eric Evans 再次…...
【2023】华为OD机试真题Java-题目0210-优秀学员统计
优秀学员统计 题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。 每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。 请你实现代码帮助统计出打卡次数top5的员…...
2023备战金三银四,Python自动化软件测试面试宝典合集
马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试,一个程序员成长之路永恒绕…...
2023年实体店做什么比较好赚钱?
2023年实体店做什么比较好赚钱?未来实体店真正能赚的模型是什么?#百收#狂潮老师#千行#干货分享#商业思维 2023年实体店做什么比较好赚钱?...
SpringSecurity前后端分离(一篇就够了)
SpringSecurity前后端分离 从上至下操作,直接上手SpringSecurity 文章目录SpringSecurity前后端分离1、项目环境maven依赖数据库表2、自定义UserService接口3、屏蔽Spring Security默认重定向登录页面以实现前后端分离功能1、实现登录成功/失败、登出处理逻辑1、表…...
Allegro如何用Label Tune功能自动调整丝印到器件中心
Allegro如何用Label Tune功能自动调整丝印到器件中心 在做PCB设计的时候,调整丝印是比较费时的工作,如果需要把整板的丝印位号调整到器件的中心做装配图使用,Allegro的Label Tune功能支持快速把丝印位号居中到器件中心。 以下图为例,快速把所有丝印位号居中 调整前 调整后…...
Linux(十)线程安全 上
目录 一、概念 二、互斥锁实现互斥 三、条件变量实现同步 银行家算法 生产者与消费者模型 一、概念 概念:在多线程程序中,如果涉及到了对共享资源的操作,则有可能会导致数据二义性,而线程安全就指的是,就算对共享…...
CRM系统能给企业带来什么? CRM系统推荐
什么是CRM系统? CRM系统(又称客户关系管理系统)是一个以客户为核心的管理软件,能有效改善企业与现有客户的关系,且帮助企业寻找新的潜在客户,并赢回以前老客户。 CRM系统能给企业带来什么? C…...
ESP32设备驱动-LED控制器生成PWM信号
LED控制器生成PWM信号 文章目录 LED控制器生成PWM信号1、LED控制器介绍2、软件准备3、硬件准备4、代码实现PWM 是一种在数字引脚上获取类似模拟信号的方法。PWM实际上是一个在高电平和低电平之间切换的方波信号,在 0V 和 3.3V 之间。 当信号为 HIGH 和 LOW 时,这种连续的 HIG…...
秒杀项目之网关服务限流熔断降级分布式事务
目录一、网关服务限流熔断降级二、Seata--分布式事务2.1 分布式事务基础2.1.1 事务2.1.2 本地事务2.1.3 分布式事务2.1.4 分布式事务场景2.2 分布式事务解决方案2.2.1 全局事务可靠消息服务2.2.2 最大努力通知2.2.3 TCC事事务三、Seata介绍四、 Seata实现分布式事务控制4.1 案例…...
OSS(Object Storage Service)进行上传图片,下载图片(详细看文档可以完成操作)
文章目录1.单体前后端项目上传1.上传流程2. BuckName 和EndPoint3. AccessKey 和Access Secret(创建RAM(Resource Access Manage)的子账号,然后可以获得Accesskey和Acess Secret)3.根据创建的子账号分配OSS的所有权限(可以对文件进行上传&…...
4年功能测试经验,裸辞后找不到工作怎么办?
软件测试四年,主要是手动测试(部分自动化测试和性能测试,但是用的是公司内部自动化工具,而且我自动化方面是弱项。) 现在裸辞三个月了,面试机会少而且面试屡屡受挫。总结就是自动化,性能&#…...
类和对象(中)(二)
类和对象(中)(二)1.赋值运算符重载1.1运算符重载1.2赋值运算符重载1.3前置和后置重载2.const成员3.取地址及const取地址操作符重载🌟🌟hello,各位读者大大们你们好呀🌟🌟…...
Hadoop自动安装JDK
目录 1、使用xftp工具 在opt目录下创建install和soft文件 2、使用xftp工具 将压缩包上传到install文件 3、编写shell脚本 3.1、创建目录来放shell脚本 3.2、创建autoinsatll.sh文件并修改权限 3.3、编写autoinsatll.sh 文件 4、 运行 5、测试 1、使用xftp工具 在opt目…...
Springboot+Vue java毕业论文选题管理系统
在分析并得出使用者对程序的功能要求时,就可以进行程序设计了。如图展示的就是管理员功能结构图。 系统实现前端技术:nodejsvueelementui 前端:HTML5,CSS3、JavaScript、VUE 系统分为不同的层次:视图层(vue页面&#…...
面向战场的cesium基础到进阶的案例展示(我相信VIP总是有原因的)
cesium 前置说明(友情提示,关注重点代码,其他影响复现的都可以删除或者替换数值解决) 这里面用到了cesium的模型加载、图片加载、着色器、实时改变模型状态、模型删除等知识点,这需要你自己去观摩下述会包含所有相关代码,他们的联系其实在代码中能看到(比如飞机操作类会…...
XXL-JOB 分布式任务调度平台
目录 一、简介 1.1 概述 1.2 社区交流 1.3 特性 1.4 架构设计 1.4.1 设计思想 1.4.2 系统组成 1.4.3 调度模块剖析 1) quartz的不足 1.5、同类型框架对比 1.6 下载 1.6.1 文档地址 1.7 环境 二、XXL-JOB安装部署 2.1、配置部署“调度中心” 1&…...
通过 指针 引用 多维数组 详解
目录 一:回顾多维数组地址知识 二:二维数组的有关指针 三:指向数组元素的指针变量 四:用指向数组的指针作为函数参数 首先简单来讲,指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。下面…...
【Linux】宝塔面板 SSL 证书安装部署
宝塔面板 SSL 证书安装部署前言证书下载宝塔配置SSL注意事项前言 前期有讲过Tomcat和Nginx分别部署SSL证书,但也有好多小伙伴们私信我说,帮忙出一期宝塔面板部署SSL证书的教程,毕竟宝塔的用户体量也是蛮大的,于是宠粉的博主&…...
由 GPT 驱动的沙盒,尽情发挥想象力! #NovelAI
一个由 GPT 驱动的沙盒,供用户尽情发挥想象力的空间,会获得怎样的体验?NovelAI NovelAI 是一项用于 AI 辅助创作、讲故事、虚拟陪伴的工具。NovelAI 的人工智能算法会根据用户的方式创建类似人类的写作,使任何人,无论能…...
ubuntu 服务器安装配置VNC访问
ubuntu 如果服务器没有桌面相关图形包,需手动安装下: sudo apt install ubuntu-desktop sudo apt install lightdm VNC安装: 1.安装 在Ubuntu上安装x11vnc,如下: sudo apt-get install x11vnc 2.配置vnc密码 x1…...
【C→C++】打开C++世界的大门
文章目录前言什么是CC的发展史C的重要性1. 使用广泛度2. 工作领域的应用1. C关键字(C98)2. 命名空间2.1 命名空间的定义2.2 命名空间的使用2.3 std命名空间的使用惯例3. C输入&输出3.1 输入输出3.2 说明4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类5. 函数重载5.1 函数重载…...
点云深度学习系列博客(四): 注意力机制原理概述
目录 1. 注意力机制由来 2. Nadaraya-Watson核回归 3. 多头注意力与自注意力 4. Transformer模型 Reference 随着Transformer模型在NLP,CV甚至CG领域的流行,注意力机制(Attention Mechanism)被越来越多的学者所注意,将…...
设置Visual Studio 2022背景图
前言 编写代码时界面舒服,自己喜欢很重要。本篇文章将会介绍VS2022壁纸的一些设置,主题的更改以及如何设计界面。 理想的界面应该是这样的 接下来我们来一步步学习如何将界面设计成这样 一、壁纸插件下载 1.拓展->点击拓展管理 2.右上角搜索backgro…...
三鼎网络网站建设/旺道seo优化软件怎么用
vs2005添加include lib文件目录 http://blog.sina.com.cn/s/blog_79489160010145wb.html 1. 添加编译所需要的 lib 文件 [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 &am…...
win7本机做网站/阿里云com域名注册
最近更新的博客 华为OD机试 - 招聘(Python) | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 五键键盘 | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 热点网络统计 | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 路灯照明 | 备考思路,刷题要点,答疑 【新解…...
定制网站开发方案/新型营销方式
1.可迭代对象(Iterable): 可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 其中包括 迭代器(Iterator) 和 生成器(generator) 2.迭代器(Iterator): 可以被next()函数调用并不断返回下一个值的对象称之为迭代器:Iterator 3.生成器(…...
现在电商好做吗/云优化软件
作者 | 梦想橡皮擦 责编 | 张文 来源 | 转载自 CSDN 博客 俗话说的好,代码写的少,离职少不了。 最近畅游互联网,发现一些离职小技巧,读后,内心被深深的打动了 但是细细的品过之后,发现对我们程序员不太…...
电子商务网站开发 微盘下载/旧版优化大师
7.2 颠覆传统的电商智能助理-阿里小蜜技术揭秘 1. 双11的挑战与服务模式的转型 在全球人工智能领域不断发展的今天,包括Google、Facebook、Microsoft、Amazon、Apple等互联公司相继推出了自己的智能私人助理和机器人平台,智能人机交互成为各大公司在人工…...
服务器做jsp网站教程视频教程/嘉兴seo
(图片来源:网络) 使用传统的数值方法去求解具有非确定性多项式时间难度的NP-Hard问题经常失败,而合成量子系统模拟具有解决此类问题的潜力。法国量子计算公司——Pasqal目前就在开发专为模拟设计的量子处理单元 (QPU),…...