想要统计企业业务人员的花费。假设如下:
有6名业务人员。
有10项花费领域(电话费,住宿费等)
每人每天在上面10个不同的领域花费100元,有可能一个领域花费100也有可能每个领域花费10元,都是不定的。
用可视化图表展示一年的上述数据,如何展示才清晰美观。
在展示一年的企业业务人员花费数据时,考虑到每天有10个不同的花费领域,以及6名业务人员,我们可以使用一个多维条形图(3D条形图)来可视化四维数据。
下面是使用Python中的Matplotlib库实现该可视化的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 生成随机数据
np.random.seed(1)
num_persons = 6
num_expenses = 10
num_days = 365
data = np.random.randint(1, 101, size=(num_persons, num_expenses, num_days))
# 计算每个人在每个领域的总花费
total_expenses = np.sum(data, axis=2)
# 创建画布和子图
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
# 生成坐标轴数据
xpos, ypos = np.meshgrid(np.arange(num_persons), np.arange(num_expenses))
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros_like(xpos)
# 生成条形图高度数据
dx = dy = 0.8
dz = total_expenses.flatten()
# 设置条形图颜色
colors = dz / float(np.max(dz))
# 绘制3D条形图
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color=plt.cm.viridis(colors))
# 设置坐标轴标签
ax.set_xlabel('Person')
ax.set_ylabel('Expense Category')
ax.set_zlabel('Total Expense')
# 设置刻度标签
ax.set_xticks(np.arange(num_persons) + dx/2)
ax.set_yticks(np.arange(num_expenses) + dy/2)
ax.set_xticklabels(range(num_persons))
ax.set_yticklabels(range(num_expenses))
# 添加颜色条
cbar = plt.colorbar(plt.cm.ScalarMappable(cmap='viridis'))
cbar.set_label('Normalized Total Expense')
# 设置图表标题
plt.title('Annual Expense by Person and Category')
# 显示图表
plt.show()
运行以上代码,将会显示一个三维条形图,其中x轴表示业务人员,y轴表示花费领域,z轴表示总花费。条形的高度表示总花费的大小,颜色则表示花费的相对大小(使用viridis颜色映射)。你可以通过旋转和缩放图表来查看数据的不同方面。
请注意,由于数据是随机生成的,你每次运行代码时都会得到不同的结果。确保你根据你的实际数据调整代码以适应你的情况。
散点图+颜色映射:利用散点图显示数据的前两个维度,例如在二维平面上不同数据点的位置,然后利用颜色映射来表示个维度的数值。如果还有第四个维度维度,可以考虑用点的大小来表示其数值。
3D散点图+颜色映射:对于包含四个维度的数据,可以使用三维散点图显示前三个维度的数值,然后使用颜色映射来表示第四个维度的数值可以。使用不同的点形状或大小来区分不同的类别或数值范围。
可以轴线图:轴线坐标图可以用于可视化多维数据。它使用垂直于坐标轴的家具线段来表示每个维度,然后将数据点连接到对应维度的线段上。通过观察线段的交叉和变化,发现数据之间的关系和趋势。
热力图:热力图适用于四维数据中的数值关系和模式。可以将两个维度作为坐标轴,使用规划区域来表示第三个和第四个维度的数值。,通过规划区域的颜色或亮度来表示数值大小。
这些方法只是展示四维数据的常见方式,具体选择一些数据取决于数据的性质、目的和个人喜好。根据数据的特点,你可以选择适合的可视化方法或尝试不同的方法来探索数据之间的关系和趋势。
可以用动画,用时间来表示第四个维度
三维图形的显示
plot指令只能显示二维平面,plot3可以显示三维图形
plot3(x,y,z)当xyz为向量时,为对应坐标连成的线,当为矩阵时,还是对应坐标连成的线。不论是矩阵还是向量,都必须为同维‘
plot3(x1,y1,z1,x2,y2,z2)与上面类似,只是画到了同一个图上
plot3(x,y,z,’属性名‘,属性内容...)
plot3(x1.y1,z1,'属性名',属性内容,x2,y2,z2,'属性名'....)
2.网格图绘制
利用meshgrid指令生成 格点矩阵
然后再用mesh指令生成网格图
mesh指令
mesh(x,y,z)以xyz对应坐标绘制网格图(也就是方格图)
mesh(z)z为矩阵 以列下标为x自变量,行下标为y标量画图
mesh(x,y,z,'属性',属性内容)(不能与上面的一样了,颜色和形状必须单列出来)
3.曲面图绘制
与mesh指令相似
surf(x,y,z)
surf(z)
surf(x,y,z,c)也是单独表示颜色
surf(x,y,z,'属性',属性内容...)
mesh是网格划分的曲面图,surf是平滑着色(网格中也画上了颜色)的曲面图
4.光照模型
phong
5.peaks函数
从高斯分布转换和缩放得来的包含两个变量的函数,在演示mesh,surf,contour等指令十分好用
peaks返回一个49×49的矩阵
peaks(n)返回一个n×n的矩阵
peaks(v)v是一个矩阵,返回一个n×n矩阵,n=length(v)
view命令可以改变视角
例如view(15,25)方位角15,仰角25
6.surfl指令(使用一个单色映像和插值色彩,得到的图像效果更好)
surfl(x,y,z,s):s是以[sx,sy,sz]或[az,el]的形式定义光源,默认光源是45°
7.等值线图
contour(z):矩阵列下标为x轴变量,行y变量绘图
contour(z,n):与上同,绘制n条
contour(z,v):v为向量,绘制length(v)条,按大小顺序排列
contour(x,y,z):以x,y为自变量绘图,若xy为向量长度为mn,则z为m×n矩阵
contour(x,y,z,n)绘制n条
contour(x,y,z,v)与上同
8.四维图像可视化
在上述指令没给颜色参量的情况下,颜色是颜色是沿着z轴变化的
surf(x,y,z,z)默认省略了z
折线图,堆叠柱状图,箱线图等展示