首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Matplotlib数据关系型图表(2)

Matplotlib数据关系型图表(2)

作者头像
python数据可视化之路
发布2023-02-23 20:56:37
发布2023-02-23 20:56:37
1.6K0
举报

本节继续探讨数值关系型图表的绘制,主要探讨了气泡图三维散点图等高线图曲面图的绘制方法。

一、数值关系型图表(2)

1.4 气泡图

气泡图是一种多变量图表,是散点图的变体,也可认为是散点图和百分比区域图的组合。气泡图需要三个变量确定,前两个维度数据确定气泡的位置,与散点图不同的是,每一个气泡的面积代表第三维度的数据。气泡图通过气泡的位置和大小,可以分析数据之间的相关性。

注:1、气泡图的大小是映射到面积的而不是半径或直径,如果是半径或直径,气泡大小会呈现指数级变化,还会导致视觉误差。

2、气泡大小通过1个视觉特征来表示,为了避免数据的重叠、遮挡,一般要设置透明度。另外的,也可以添加颜色渐变的气泡图(2个视觉特征)来表示,可以观察到数据的变化。

语法:

plt.scatter(x,y,s,c,marker,cmap,alpha,**kwargs)

语法解释与上一节散点图一致。

示例代码:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(0)
x = 4 + np.random.normal(0, 2, 24)
y = 4 + np.random.normal(0, 2, len(x))
sizes = np.random.uniform(15, 80, len(x))*10
colors = np.random.uniform(15, 80, len(x))

fig = plt.figure(figsize = (8, 8))
#默认绘图,利用默认的颜色 
ax1 = fig.add_subplot(221)
ax1.scatter(x, y, s = sizes, alpha = .3)
#设置颜色数组,利用默认的颜色条带
ax2 = fig.add_subplot(222)
ax2.scatter(x, y, s = sizes, c = colors, alpha = .6)
#设置颜色数组,指定颜色条带,添加颜色指示图例
ax3 = fig.add_subplot(212)
cf = ax3.scatter(x, y, s = sizes, c = y, cmap = 'jet', alpha = .6)
cbar = fig.colorbar(cf, ax = ax3, extend = 'both', orientation='horizontal') 
cbar.set_label("Value")

plt.show()

1.5 三维散点图/气泡图

对于以上的气泡图数据,我们也可以将三维数据绘制到三维坐标系中,也就是三维散点图。

绘制三维散点图,需要指定画布的类型为三维坐标系,也即添加语句:ax = fig.add_subplot(221, projection='3d')

语法:plt.scatter(x,y,z,s,c,cmap,alpha,**kwargs)

参数解释类似散点图,只不过z代表数据点的垂直坐标。

代码示例(利用上一个例子的数据):

代码语言:javascript
复制
fig = plt.figure(figsize = (10, 10))
#2维散点图
ax1 = fig.add_subplot(221)
ax1.scatter(x, y, s = sizes, c = colors, cmap = 'jet', alpha = .6)
#设置三维散点图,指定z值为sizes数组
ax2 = fig.add_subplot(222, projection = '3d')
ax2.scatter(x, y, sizes, c = colors, cmap = 'jet', alpha = .6)
#指定z值和大小为sizes数组
ax3 = fig.add_subplot(223, projection = '3d')
ax3.scatter(x, y, sizes, s = sizes, c = colors, cmap = 'jet', alpha = .6)
#旋转三维图,azim表示绕着Z轴旋转,elev表示绕着Y轴旋转 
ax4 = fig.add_subplot(224, projection = '3d')
ax4.scatter(x, y, sizes, s = sizes, c = colors, cmap = 'jet', alpha = .6)
ax4.view_init(azim = 40, elev = 20)

plt.show()

1.6 等高线图

等高线图是可视化二维空间标量场的基本方法,可以将三维数据以二维的方式表现出来。

语法:plt.contour([x,y],z,levels,**kwargs)

参数解释:

x,y:形状与z一致,是一个二维数组。

z:在x,y位置下的高度值。

levels:如果为整数n,则在z的最大值和最小值之间自动寻找不大于n+1条间隔的最优化等高线。也可以传入数组,表示等高线的值,但是必须从大到小排列。

**kwargs:其他参数,例如colors(等高线颜色);camp(颜色映射)等等。

代码语言:javascript
复制
#构建子图,3行2列,在列上共享x轴,行上共享y轴 
fig, ax = plt.subplots(3, 2, sharex = 'col', sharey = 'row', figsize = (10, 15))
#构造数据 
N = 100
x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)
X, Y = np.meshgrid(x, y) ##关键语法,生成格网化的X,Y 
def Z(a, b): #Z值生成规则
    return (1 - b ** 5 + a ** 5) * np.exp(-a ** 2 - b ** 2)
    
#生成10条等高线,颜色为黑色     
ax1 = ax[0, 0]
ax1.contour(X, Y, Z(X, Y), 10, colors='k')

#生成10条等高线,并添加等高线的数值,保留2位小数 
ax2 = ax[0, 1]
labels = ax2.contour(X, Y, Z(X, Y), 10, colors='k')
ax2.clabel(labels, inline=True, colors=['k', 'r', 'g', 'b'], fmt='%.2f')

#为每条等高线设置颜色,一共10条等高线,按照k,r,g,b分别设色,并设置线形
ax3 = ax[1, 0]
colors = ['k', 'r', 'g', 'b']
labels = ax3.contour(X, Y, Z(X, Y), 10, colors = colors, linestyles = '--')
ax3.clabel(labels, inline = True, colors = colors, fmt = '%.2f')

#为等高线设置颜色映射,映射名称为jet
ax4 = ax[1, 1]
labels = ax4.contour(X, Y, Z(X, Y), 10, cmap = 'jet')
ax4.clabel(labels, inline = True, colors = 'k', fmt = '%.2f')

#传入levels数组,手动设置等高线条数和数值
ax5 = ax[2, 0]
labels = ax5.contour(X, Y, Z(X, Y), levels = [-0.6, -0.3, 0.0, 0.4, 0.8], cmap = 'jet')
ax5.clabel(labels, inline = True, colors = 'k', fmt = '%.2f')

#等高线填充颜色,就将contour改为contourf即可
ax6 = ax[2, 1]
ax6.contourf(X, Y, Z(X, Y), levels = 10, cmap = 'jet')
labels = ax6.contour(X, Y, Z(X, Y), levels = 10, cmap = 'jet')
ax6.clabel(labels, inline = True, colors = 'k', fmt = '%.2f')
#调整子图水平、垂直间距
plt.subplots_adjust(wspace = 0.05, hspace = 0.05)
plt.show()

1.7 曲面图

曲面图实际上是对等高线图的延伸,将等高线上的z值用第三维数值表示。

注:使用曲面图首先要创建一个axes3D对象

语法:

axes3D.plot_surface(x,y,z,**args)

代码示例(使用上一个例子的数据):

代码语言:javascript
复制
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fig = plt.figure(figsize = (7, 7))
ax2 = Axes3D(fig) #生成axes3D对象
#绘制曲面图
cf = ax2.plot_surface(X, Y, Z(X, Y), cmap = 'jet', alpha = .8)
#绘制等高线图,offset表示z值所处位置
labels = ax2.contour(X, Y, Z(X, Y), levels = 10, cmap = 'jet', offset = -0.6, linestyles = '--')
ax2.clabel(labels, inline = True, colors = 'k', fmt = '%.2f')
#绘制色条 
cbar = fig.colorbar(cf, ax = ax2, orientation='horizontal', pad = -0.01) 
cbar.set_label("Value")

plt.show()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档