本文来自鸽子学Python专栏系列文章,欢迎各位交流。


文章目录

  • Matplotlib介绍
  • 第一部分 Matplotlib基础
    • 1 基础知识
      • 1.1 图形绘制
      • 1.2 坐标轴刻度、标签、标题
      • 1.3 图例
      • 1.4 脊柱移动
      • 1.5 图片保存
    • 2 风格和样式
      • 2.1 颜色、线宽、线型、透明度、点型
      • 2.2 更多属性设置
    • 3 多图布局
      • 3.1 子视图
      • 3.2 嵌套
      • 3.3 多图布局分格显示
        • 3.3.1 均匀布局
        • 3.3.2 不均匀布局
      • 3.4 双轴显示
    • 4 文本、箭头、注释
    • 4.1 文本
      • 4.2 箭头
      • 4.3 注释
  • 第二部分 Matplotlib图表绘制
    • 1 折线图
    • 2 条形图、柱状图
    • 3 极坐标图
    • 4 直方图
    • 5 箱式图
    • 6 散点图
    • 7 饼图
      • 7.1 一般饼图
      • 7.2 嵌套饼图
    • 8 热力图
    • 9 面积图
    • 10 蜘蛛图
    • 11 3D图形

Matplotlib介绍

​在数据分析与机器学习中,我们经常要用到大量的可视化操作。⼀张制作精美的数据图片,可以展示大量的信息,⼀图顶千言。

​而在数据可视化中,Matplotlib是最常用的工具,它是 Python 最著名的绘图库,可以使用交互式环境生成出版质量级别的图形。

Matplotlib提供了⼀整套API,十分适合绘制图表,或修改图表的⼀些属性,如字体、标签、范围等。通过Matplotlib这个标准类库,开发者只需要几行代码就可以实现生成折线图、散点图、柱状图、饼图、直方图、组合图等数据分析可视化图表。

安装Matplotlib库:

  • pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

第一部分 Matplotlib基础

1 基础知识

1.1 图形绘制

import numpy as np
import matplotlib.pyplot as plt # 画图的画笔# 图形准备
x = np.linspace(0,2*np.pi,100) # 360°分成100份
y = np.sin(x) # 正弦函数# 画笔,可以绘制点和线, 并且对其样式进行控制,画图主要靠这个方法控制
plt.plot(x,y) plt.grid(linestyle = '--', # 网格线样式color = 'green', # 颜色alpha = 0.75) # 网格线透明度plt.xlim([-1,10]) # 横坐标范围plt.ylim([-1.5,1.5]) # 纵坐标范围

输出:

1.2 坐标轴刻度、标签、标题

# 获取电脑上字体,下面设置标题字体时要用
from matplotlib.font_manager import FontManager # 字体管理工具
fm = FontManager() # 生成电脑中的字体列表
[font.name for font in fm.ttflist]
# 图形准备
x = np.linspace(0,2*np.pi,100)
y = np.sin(x)# 设置图形大小的方法为 plt.figure(figsize=(a, b), dpi=dpi)
# 其中:figsize为设置图形的大小,a为图形的宽,b为图形的高,单位为英寸
# dpi为设置图形每英寸的点数
plt.figure(figsize=(9,6))plt.plot(x,y)plt.yticks([-1,0,1],['min',0,'max'],fontsize = 18) # 纵坐标刻度,从-1至1,命名MIN和MAX,字体尺寸18
plt.ylabel('y = sin(x)',rotation = 0,fontsize = 18,ha = 'right') # 纵坐标标签,rotation旋转,ha水平对齐方向
_ = plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,2*np.pi], # 横坐标刻度,前面加变量接收可以不用输出对象# 语法前加r表示正则表达式的意思,如果不加r的话\表示转义,需要加\\[0,'$\\frac{\pi}{2}$',r'$\pi$',r'$\frac{3\pi}{2}$',r'$2\pi$'], fontsize = 18,color = 'red')plt.title('正弦波',fontsize = 18,color = 'red',family = 'STCaiyun') # 标题,family字体,用上面选代码选择电脑里的字体

输出:

1.3 图例

# 图形准备
x = np.arange(0,2*np.pi,step = np.pi/50) # 100份数据,step间隔plt.figure(figsize=(9,6))
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))# 这里宽度高度都是相对的
x = 0 # 图例相对于图片宽度(原点)的位置
y = 1.05 # 图例相对于图片高度(原点)的位置
width = 1 # 图例宽度
height = 0.2 # 图例高度# 设置图例样式
plt.legend(['Sin','Cos'], # 图例名字fontsize = 18, # 图例字体大小loc = 'center', # 对齐方式ncol = 2, # 图例列数,这里是2列图例为一行bbox_to_anchor = (x,y,width,height))# 指定图例相对位置和大小

输出:

1.4 脊柱移动

# 图形准备
x = np.linspace(-np.pi,np.pi,100)
plt.figure(figsize=(9,6))
plt.plot(x,np.sin(x),x,np.cos(x))axes = plt.gca() # gca意思是get current axes,指轴面、子视图axes.spines['top'].set_color('white') # 轴面上部边框线设置为白色
axes.spines['right'].set_color('white') # 轴面右部边框线设置为白色axes.spines['left'].set_position(('data',0))
# data表示图表的数据或数值,这里指将轴面左边框移动至数据0点(原点)处
axes.spines['bottom'].set_position(('data',0))
# data表示图表的数据或数值,这里将轴面下边框移动至数据0点(原点)处plt.yticks([-1,0,1])
_ = plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\frac{\pi}{2}$','0',r'$\frac{\pi}{2}$',r'$\pi$'],fontsize = 18,color = 'red')

输出:

1.5 图片保存

# plt绘图大致原理
plt.figure(figsize=(9,6),linewidth = 5) # 1.创建了一个figure图片,设置了图片大小和边框线宽度plt.plot(x,np.sin(x),x,np.cos(x)) # 2.在轴面中,进行图片的绘制# 3.设置图例
plt.legend(['Sin','Cos'],loc = 'center',ncol = 2,bbox_to_anchor = (0,1.05,1,0.2),fontsize = 18) # 4.设置轴面
axes = plt.gca()
axes.set_facecolor('lightgreen') # 轴面,被figure(图片)包围着# 5.图片保存
plt.savefig('./image.png',  # 图片名和位置dpi = 100, # 设置DPI,越大越清晰facecolor = 'red', # 大图片和轴面间隔的颜色edgecolor = 'lightgreen', # 图片边框线的颜色(不是轴面边框)bbox_inches = 'tight') # 设置紧凑显示,保存整张图片

输出:

2 风格和样式

2.1 颜色、线宽、线型、透明度、点型

# 图形准备
x = np.linspace(0,2*np.pi,20)
y1 = np.sin(x)
y2 = np.cos(x)# color 线的颜色
# linestyle 线型,线的形状
# alpha 透明度
# marker 点型,点的形状
# markersize 点的大小
# linewidth 线宽
plt.plot(x,y1,color = 'red',linestyle = '--',alpha = 0.5,marker = 'o')plt.plot(x,y2,color = 'k',linestyle = '-.',marker = '*')plt.plot(x,y1 + y2,color = 'indigo',linestyle = ':',marker = 'd')plt.plot(x,y1 - 2*y2,color = '#FF00FF', # 颜色也可以直接用16进制指定linestyle = '--',marker = '1') plt.plot(x,2*y1 + y2,color = (0.2,0.6,0.5), # 元组代表红绿蓝,可以用RGB指定颜色ls = '-.',marker = '3',markersize = 20,linewidth = 5)

输出:

PS:颜色的种类

2.2 更多属性设置

# 图形准备
x = np.linspace(0,5,50)
def fun(x): return np.exp(-x)*np.cos(2*np.pi*x)
y = fun(x)plt.figure(figsize=(9,6))plt.plot(x,y,marker = 'o', # 点型color = 'green', #线的颜色markersize = 12, #点大小markerfacecolor = 'red', # 点实体的颜色linestyle = '--', # 线型markeredgecolor = 'blue', # 点边缘的颜色markeredgewidth = 3, #点边缘的宽度alpha = 0.7) # 透明度

输出:

3 多图布局

3.1 子视图

# 图形准备
x = np.linspace(0,2*np.pi,20)
y = np.sin(x)#生成图片整体
plt.figure(figsize=(9,6))#生成子视图轴面
axes = plt.subplot(2,2,1) # 2,2,1 代表 2行2列第1个轴面# 设置第一个轴面的参数
axes.set_facecolor('green')
axes.plot(x,y,color = 'red')# 生成第二个轴面
axes = plt.subplot(222) # 也可以连起来写,2行2列第2个轴面# 调用plot,会返回绘制对象,返回对象是一个列表,第一个元素代表一条线
line, = axes.plot(x,y)
line.set_color('green') # 接受返回对象后可以设置线的参数
line.set_linestyle('--')
line.set_marker('o') # 生成第三个轴面
# 2行1列第2个轴面,即把上面两个轴面看成一行,所以这个轴面是第二个
axes = plt.subplot(2,1,2) x = np.linspace(-np.pi,np.pi,200)
y = np.sin(x*x)# plt.plot(x,y) = axes.plot(x,y) 绘制效果一致
# plt.plot方法默认指向最近生成的这个子视图
plt.plot(x,y) #所以直接调用plot方法绘制图形就是向最近这个轴面绘制

输出:

3.2 嵌套

#图形准备
x = np.linspace(0,2*np.pi,100)
y = np.sin(x)# fig就是图片整体
fig = plt.figure(figsize=(9,6)) # 绘制主图
plt.plot(x,y) # 轴面列表表示[left, bottom, width, height]
# left和bottom代表坐标位置,范围是0至1,0表示X轴最下方、Y轴最左边
# width 宽度,height 高度
ax = plt.axes([0.6,0.6,0.2,0.2]) # 绘制第一个嵌套轴面
ax.plot(x,y,color = 'red')ax = fig.add_axes([0.2,0.2,0.2,0.2]) # 添加第二个嵌套轴面
ax.plot(x,y,color = 'green',ls  = '--')

输出:

3.3 多图布局分格显示

3.3.1 均匀布局

x = np.linspace(0,2*np.pi,200)# 与上面子视图的区别;只用两个参数,不指定第几个,就会返回子视图
fig,((ax11,ax12,ax13),(ax21,ax22,ax23),(ax31,ax32,ax33)) = plt.subplots(3,3)
# 用变量去接收返回值,fig是图片整体# 图片整体宽度和高度
fig.set_figwidth(12)
fig.set_figheight(9)# 直接绘制各个子视图的图形
ax11.plot(x,np.sin(x))
ax12.plot(x,np.cos(x))
ax13.plot(x,np.tan(x))
ax21.plot(x,np.tanh(x))
ax22.plot(x,np.sin(x*x))
ax23.plot(x,np.cos(x*x))
ax31.plot(x,np.sin(x)*np.cos(x))
ax32.plot(x,np.sin(x) + np.cos(x))
ax33.plot(x,np.sin(2*np.pi*x)*np.exp(-x))plt.tight_layout() # 设置为紧凑布局

输出:

3.3.2 不均匀布局

# 指定子图将放置的网格的几何位置。需要设置网格的行数和列数。
from matplotlib import gridspec
plt.figure(figsize=(12,9))x = np.linspace(0,2*np.pi,200)gs = gridspec.GridSpec(3,3) # 生成3行3列的子视图,用变量接收ax = plt.subplot(gs[0,:]) # 与切片规则一致,指第1行所有列
ax.plot(x,np.sin(10*x)) # 绘制图形# 与前面讲过的绘图方法一致
ax = plt.subplot(gs[1,:2]) # 第2行,第1、2列
ax.set_facecolor('green')
ax.plot(x,np.cos(x),color = 'red')ax = plt.subplot(gs[1:,2]) # 第2、3行第3列
ax.plot(x,np.sin(x))ax = plt.subplot(gs[2,0]) # 第3行第1列
ax.plot(x,np.cos(2*np.pi*x)*np.exp(-x))ax = plt.subplot(gs[2,1]) # 第3行第2列
ax.plot([0,1,2],[0,1,2],marker = 'o')

输出:

3.4 双轴显示

x = np.linspace(-np.pi,np.pi,200)
y1 = np.sin(x)
y2 = np.exp(x)
plt.figure(figsize=(9,6))# 生成子视图
ax1 = plt.subplot(111)# 绘图
ax1.plot(x,y1,color = 'red')
plt.yticks(color = 'red',fontsize = 18)
plt.ylabel('Sin',fontsize=18,color = 'red')# 两个子视图公用一个X轴,两个Y轴
ax2 = ax1.twinx() # 共享X轴,双Y轴显示,返回一个新的子视图;
ax2.plot(x,y2,color = 'blue')
plt.yticks(color = 'blue',fontsize = 18)
plt.ylabel('Exp',color = 'blue',fontsize = 18)
# 如果要绘制双X轴图形,则使用twiny,参考上例

输出:

Tips:

根据以上的例子我们也可以看出,在Matplotlib里,即使在同一个子视图里多次绘制图形,之前绘制的图形也不会被重写,而是在原来的基础上绘制。同理,定义变量对变量绘图后重写变量,原来绘制的图片也不会被覆盖。

4 文本、箭头、注释

常用函数如下:

Pyplot函数 API方法 描述
text() mpl.axes.Axes.text() 在Axes对象的任意位置添加文字
xlabel() mpl.axes.Axes.set_xlabel() 为X轴添加标签
ylabel() mpl.axes.Axes.set_ylabel() 为Y轴添加标签
title() mpl.axes.Axes.set_title() 为Axes对象添加标题
legend() mpl.axes.Axes.legend() 为Axes对象添加图例
annnotate() mpl.axes.Axes.annotate() 为Axes对象添加注释(箭头可选)
figtext() mpl.figure.Figure.text() 在Figure对象的任意位置添加文字
suptitle() mpl.figure.Figure.suptitle() 为Figure对象添加中⼼化的标题

4.1 文本

x = np.linspace(0,2*np.pi,200)
y = np.cos(2*np.pi*x)*np.exp(-x)
plt.figure(figsize=(9,6))
plt.plot(x,y)# 插入文本
plt.text(x = 3,y = 0.4, # 位置,插入相应的刻度位置处,这里指X轴的3刻度和Y轴的0.4刻度对应位置s = r'$exp(-x)*sin(2\pi x)$',fontsize = 18,color = 'red') plt.xlabel('X',fontsize = 18) # X轴标签
plt.ylabel('Y',fontsize = 18) # Y轴标签plt.title('Exp decay',fontdict = {'color':'red','fontsize':'18','alpha':0.4,'rotation':30}) # 标题plt.suptitle('指数衰减',fontfamily = 'STZhongsong',fontsize = 18) # 总标题

输出:

4.2 箭头

data = np.random.randint(0,10,size = (10,2))
plt.figure(figsize=(9,6))# 绘制散点图
plt.scatter(x = data[:,0],y = data[:,1],color = 'green',marker = '*',s = 100)for i in range(9):start = data[i] # 起始坐标end = data[i + 1] # 终点坐标#绘制箭头plt.arrow(x = start[0],y = start[1], # 起点坐标dx = end[0] - start[0],dy = end[1] - start[1],#水平和竖直距离lw = 2,# 箭尾线宽head_width = 0.2,# 箭头宽度length_includes_head = True)# 长度计算是否包含箭头大小)plt.text(start[0],start[1],i,fontsize = 18,color = 'red') # 给散点标上文本if i == 8:plt.text(end[0],end[1],i + 1,fontsize = 18,color = 'red') # 第9个时同时给第10个散点标上文本

输出:

4.3 注释

# 绘图
x = np.linspace(0,20,300)
plt.figure(figsize=(9,6))
plt.plot(x,np.sin(x))
plt.ylim([-2,2])# 绘制最大值的注释
plt.annotate('max', # 文本xy=(np.pi/2,1), # 箭头指向位置坐标点xytext =(3,1.5), # 文本位置坐标点arrowprops = {'width':2, # 箭尾线宽'headwidth':6,'headlength':15, # 箭头的宽度和长度'shrink':1}) # 缩放# 绘制中值的注释
plt.annotate('median',xy = (2*np.pi,0),xytext = (1.25,-0.65),arrowprops = {'arrowstyle':'fancy'}) # 箭头风格,内置默认参数# 绘制最小值的注释
plt.annotate('min',xy = (3.5*np.pi,-1),xytext = (15.5,-1.65),arrowprops = {'arrowstyle':'-|>', 'connectionstyle':'angle,angleA=90,angleB=180,rad=10',}) # 连线的风格,angle是风格名字# angleA和B是连线转角角度,角度水平向右是0度,竖直向上90# rad是转角弧度

输出:

**PS:常用注释箭头连线风格: **

第二部分 Matplotlib图表绘制

1 折线图

#折线图直接用plt.plot方法绘制# 单图布局
plt.figure(figsize=(9,6))
y = np.random.randint(0,10,15)
plt.plot(y,marker = '*') # 只给了一个Y值参数,则X轴默认设置为从0至N的整数
plt.plot(y.cumsum(),marker = 'o')# 多图布局
fig,axes = plt.subplots(2,1)
fig.set_figwidth(9)
fig.set_figheight(6)
axes[0].plot(y,marker = '*')
axes[1].plot(y.cumsum(),marker = 'o')

单图布局:

多图布局:

2 条形图、柱状图

# 条形图和柱状图用plt.bar方法绘制# 普通柱状图绘制:
y1 = np.random.randint(20,35,6) # Men
y2 = np.random.randint(20,35,6) # Women
plt.figure(figsize=(9,6))
x = np.array(['G1','G2','G3','G4','G5','G6'])# yerr是误差线,ecolor是误差线颜色,capsize是误差线上下端的长度
plt.bar(x,y1,color = 'orange',width = 0.5,yerr = 4,ecolor = 'red',capsize = 5)
plt.bar(x,y2,bottom = y1,width = 0.5,yerr = 2,ecolor = 'red',capsize = 5) # bottom = y1,意思是y2画到y1上面plt.legend(['Men','Women']) # 图例

# 分组带标签柱状图绘制:
x = np.arange(6)
y1 = np.random.randint(20,35,6) # Men
y2 = np.random.randint(20,35,6) # Women
labels = np.array(['G1','G2','G3','G4','G5','G6'])
width = 0.4
plt.figure(figsize=(12,9))# 将Men的数据设置在X坐标的左侧,宽度为width,返回bars为条形图全部条形
bars = plt.bar(x - width/2,y1,width = width) for i,bar in enumerate(bars): # 枚举,返回索引i和对象bar,bar是条形图的单个条形h = bar.get_height() # 获取单个条形的高度w = bar.get_width() # 获取单个条形的宽度plt.text(x = bar.get_x() + w/2, y = h + 0.5, # 设置标签的位置s = y1[i], # 设置标签的文本ha = 'center') # 居中显示# 将Women的数据设置在X坐标的右侧,宽度为width
bars = plt.bar(x + width/2,y2,width = width)  for i,bar in enumerate(bars): # 同上h = bar.get_height()w = bar.get_width()plt.text(x = bar.get_x() + w/2 ,y = h + 0.5,s = y2[i],ha = 'center')plt.legend(['Men','Women'])

3 极坐标图

# 绘制极坐标线图
x = np.linspace(0,4*np.pi,300) # 弧度制,720°y  = np.linspace(0,3,300)ax = plt.subplot(111,projection = 'polar', # 极坐标系facecolor = 'lightgreen')ax.plot(x,y,color = 'red') # 折线图,ax.set_rmax(4) # 高度,即极坐标半径ax.set_rticks([0,1.5,3]) # 极坐标刻度ax.set_rlabel_position(-45) # 极坐标刻度的角度

# 绘制极坐标柱状图
x = np.arange(0,2*np.pi,step = np.pi/4) # 弧度值y = np.random.randint(1,10,size = 8)plt.figure(figsize=(8,8))ax = plt.subplot(111,polar = True, # 极坐标系facecolor = 'lightgreen')# 和直角坐标系柱状图的方法一致,依然是bar方法
ax.bar(x,y,width = np.pi/4,color = np.random.rand(8,3))

Tips:从上面可以看出极坐标图仅仅是把直角坐标系换成极坐标系,在极坐标系里绘制线或者柱状的方法与直角坐标系一致

4 直方图

# 直方图其实就是条形图,展示数据分布情况
x = np.random.randn(10000) # 正态分布# count是统计次数;bins范围
count,bins,fig= plt.hist(x,bins = 100,color = 'red',density=True)
# density是密度的意思,即将Y轴值变成分布概率

5 箱式图

# 箱式图展示各组数据描述性统计情况
x = np.random.randn(500,4)labels = list('ABCD')_ = plt.boxplot(x, # 数据notch = True, # notch修饰中位数线的样式sym = 'ro', # 异常值的颜色和形状,r = red,o = 圆点labels=labels) # 各组组名

6 散点图

# 散点图表示属性之间的关系
x = np.random.randn(100,2)plt.scatter(x[:,0],x[:,1], # 数据c = np.random.rand(100,3), # 颜色(RGB)s = np.random.randint(100,300,size = 100), # 大小alpha=0.5) # 透明度

7 饼图

7.1 一般饼图

p = np.random.randint(10,100,size = 5) # 数据准备labels = ['一星','二星','三星','四星','五星'] # 标签plt.figure(figsize=(9,9))_ = plt.pie(p, # 数据labels= labels, # 标签textprops={'family':'FangSong','fontsize':18}, # 设置字体样式autopct='%0.2f%%', # 显示百分比explode = [0,0,0,0,0.15],# 数值表示突出某一部分,用列表表示shadow=True) # 阴影

7.2 嵌套饼图

p1 = np.random.randint(30,50,size = 3) # 外圈数值
p2 = np.random.randint(10,80,size = 6) # 内圈数值plt.figure(figsize=(9,9)) _ = plt.pie(p1, # 外圈radius=1, # 半径autopct='%0.2f%%', # 显示百分比pctdistance=0.85, # 百分比数据显示的位置labels = ['小狗','小猫','小鸟'], # 标签wedgeprops={'linewidth':5,# 间隔的宽度'width':0.3, # 饼图的宽度'edgecolor':'white'})# 间隔的颜色_ = plt.pie(p2,radius=0.7, # 半径,外圈是1,内圈是0.7,从而形成嵌套图autopct='%0.2f%%',pctdistance=0.55,wedgeprops={'linewidth':5,'width':0.7,'edgecolor':'white'})plt.rcParams['font.family'] = 'FangSong' # 全局字体设置
plt.rcParams['font.size'] = 18
plt.legend(['小狗','小猫','小鸟'],title = '宠物类别')

8 热力图

# 数据准备
data = np.random.randn(7,7)*5
data.round(1)# 热力图
plt.figure(figsize=(9,9))
plt.imshow(data, # 展示图片cmap=plt.cm.RdBu_r) # 图片颜色系列# 绘制数字
for i in range(7):for j in range(7):plt.text(x = j, # 列y = i, # 行s=round(data[i,j],1),ha = 'center') # 对齐方式

9 面积图

# 数据准备
days = np.arange(1,6)
working = np.array([8,9,7,8,11])
sleeping = np.array([6,7,5,8,7])
eating = np.array([3,2,3,1,3])
playing = np.array([7,6,9,7,3])plt.figure(figsize=(9,6))# 面积图
plt.stackplot(days, # X轴working,sleeping,eating,playing) # 堆叠plt.legend(['working','sleeping','eating','playing']) # 标签

10 蜘蛛图

labels = np.array(['个人能力','IQ','EQ','团队意识','持续学习','解决问题能力']) # 标签angles = np.arange(0,2*np.pi,np.pi/3) # 弧度,分成6份stats = np.random.randint(50,120,size = 6) # 个人能力强弱# 使数据首尾相连,数据和原来相比,长度增加了一个
angles = np.concatenate([angles,angles[[0]]])
stats = np.concatenate([stats,stats[[0]]])plt.figure(figsize=(8,8))
axes = plt.subplot(111,polar = True) # 生成极坐标系axes.plot(angles,stats,marker = 'o',lw = 2) # 在极坐标系里画折线图axes.fill(angles,stats,alpha = 0.2) # 填充颜色axes.set_thetagrids(angles[:-1]*180/np.pi, # 将弧度转换成角度显示,切片表示不要最后一个labels=labels,fontsize = 18)_ = axes.set_rgrids([10,30,50,70,90,110]) # 设置数值标签

11 3D图形

绘制3D折线图及散点图:

# 绘制3D图形对象库
from mpl_toolkits.mplot3d.axes3d import Axes3D # 数据准备
x = np.linspace(0,20,300)
y = np.sin(x)
z = np.cos(x)fig = plt.figure(figsize=(9,6)) # 二维图形ax3 = Axes3D(fig) # 2D视图变成3D视图
ax3.plot(x,y,z,color = 'red') # 绘制3D折线图# 绘制3D散点图
ax3.scatter(np.random.rand(50)*20,np.random.rand(50),np.random.rand(50),s = 100,color = 'green')

绘制3D直方图:

plt.rcParams['font.family'] = 'fangsong' # 全局字体设置
fig = plt.figure(figsize=(9,6))
plt.rcParams['font.size'] = 18
ax3 = Axes3D(fig)season = np.arange(1,5) # 四个季度for s in season:ax3.bar(np.arange(1,4),# 三个月,横坐标np.random.randint(50,100,size = 3),# 销量,纵坐标zs = s, # 偏移量,4个季度zdir = 'x',# 排列方向,沿X轴偏移alpha = 0.5) # 透明度ax3.set_xlabel('X',fontsize = 18,color = 'red') # X轴标题
ax3.set_xticks([1,2,3,4]) # X轴颗粒度
ax3.set_xticklabels(['一季度','二季度','三季度','四季度']) # X轴标签
_ = ax3.set_yticks([1,2,3]) # Y轴颗粒度


其他3D图形参考2D图形绘制方法。

鸽子学Python 之 Matplotlib数据绘图库相关推荐

  1. python之Matplotlib(2D绘图库)

    Matplotlib 绘制基础 头部引包 直线 折线 设置标签文字和线条粗细 解决标签.标题中的中文问题 一元二次方程的曲线y=x^2 正弦.余弦函数 散点图 柱状图 np.random.randin ...

  2. python画画用哪库好_小白开始学Python最著名的绘图库

    原标题:小白开始学Python最著名的绘图库 这是菜鸟学Python的第101篇原创文章 数据分析里面可视化是重要的环节,辛苦把数据采集,然后经历了很多工序的清洗之后,最后要展现给用户,最好的方法就是 ...

  3. 鸽子学Python 之 Pandas数据分析库

    本文来自鸽子学Python专栏系列文章,欢迎各位交流. 文章目录 Pandas介绍 第一部分 Pandas基础 1 Pandas数据结构 1.1 Series 1.2 DataFrame 2 数据查看 ...

  4. Python数据分析——Matplotlib数据可视化基础(二)

    Python数据分析--Matplotlib数据可视化基础(二) 思维导图: 图形的绘制 认识要绘制的图形 基本绘图流程 pyplot基础图表函数 pyplot饼图的绘制 pie函数 matplotl ...

  5. Python中使用pyqtgraph绘图库实时绘制计算机CPU使用率等数据曲线

    一.项目需求 获取约30台电脑的CPU使用率.CPU温度.系统盘容量.系统盘使用率.总硬盘使用率.内存使用率.GPU使用率等数据 将1中数据集中用图表的形式集中展示出来 二.设计思路 采用C/S架构( ...

  6. python画图库哪个好_小白开始学Python最著名的绘图库

    这是菜鸟学Python的第101篇原创文章 阅读本文大概需要3分钟 数据分析里面可视化是重要的环节,辛苦把数据采集,然后经历了很多工序的清洗之后,最后要展现给用户,最好的方法就是数据可视化.数据可视化 ...

  7. 数据科学与python语言——Matplotlib数据可视化基础

    Matplotlib数据可视化基础 一.读取数据与数据处理阶段 1.提取指定行中的数据 2.得到>指定数值的数据 3.得到=指定值得数据 4.整体的数据处理: 二.画图函数 1.plt.subp ...

  8. Python 使用matplotlib数据可视化显示CSV文件数据

    (一)获取数据 1.下载sitka_weather_07-2014.csv数据:https://ehmatthes.github.io/pcc/ (二)分析CSV文件头 csv模块包含在python标 ...

  9. matplotlib数学绘图库——折线图,内置样式中文问题解决方法

    安装:只需要安装matplotlib函数库即可,pip install matplotlib 因为matplotlib中无法显示中文(没有中文字体库),所以需要添加以下代码: import matpl ...

最新文章

  1. centos6.4安装java,CentOS6.4下YUM安装MySQL和JDK和Tomcat
  2. 专家揭示模块化数据中心的真谛
  3. 如何把配置文件集成到.exe中_VSCode如何使用cmder
  4. 通过js动态设置select中option选中
  5. php 计算日期差几周,PHP计算两个时间之差的函数(年,月,周,日,小时,分钟,秒数)
  6. docker 制作本地镜像_Docker系列-(2) 镜像制作与发布
  7. Unity3D 去色Shader实现
  8. 最短路算法——Floyd-Warshall
  9. 数据库的备份与恢复技术
  10. 服务器安装系统关闭磁盘阵列,戴尔服务器H330阵列卡取消磁盘阵列教程
  11. 在注视之外:对于认知和认知发展研究,眼动追踪还能揭示什么?
  12. docker the input device is not a TTY. If you are using mintty, try prefixing the command with ‘winp
  13. Git-储藏(Stashing)
  14. SAP PS 项目编码配置 OPSJ/OPSK
  15. Linux中使用者身份的切换su和sudo的用法
  16. 什么是 metaprogramming
  17. 解决 PLSQL 12 汉化不完全 汉化后还显示英文 问题
  18. 2021-08-25王汕8.25国际黄金白银晚间价格走势分析及原油期货空单解套操作建议
  19. 货币 和 日期 转 中文大写
  20. 《Unix 编程艺术》 理解

热门文章

  1. iOS复选框——高雅的BEMCheckBox
  2. 局域网某台电脑无法上网排查思路
  3. 云计算技术在通信运营商的应用浅析
  4. string小数点取后n位_js保留小数点后N位的方法介绍
  5. 要不要做会员?解构会员体系的本质
  6. JavaScript开发工具webstorm安装
  7. Combine操作符append和prepend
  8. 【热门】熊猫头比心熊猫头跳舞表情包合集~
  9. PHP关于redis面试题
  10. win7计算机配置的主要功能,你真的知道win7系统电脑配置要求是什么吗?