为了账号安全,请及时绑定邮箱和手机立即绑定

在 python 中使用 matplotlib 在 3 个轴中包含日期、字符串和数字的 3D 条形图

在 python 中使用 matplotlib 在 3 个轴中包含日期、字符串和数字的 3D 条形图

HUX布斯 2022-12-14 20:31:13
我有下面提到的三个列表。xx =  ['TT', 'AN', 'AP', 'AR', 'AS', 'BR', 'CH', 'CT', 'DN', 'DD', 'DL', 'GA', 'GJ', 'HR', 'HP', 'JK', 'JH', 'KA', 'KL', 'LA', 'LD', 'MP', 'MH', 'MN', 'ML', 'MZ', 'NL', 'OR', 'PY', 'PB', 'RJ', 'SK', 'TN', 'TG', 'TR', 'UP', 'UT', 'WB']yy = [datetime.date(2020, 5, 27), datetime.date(2020, 5, 28), datetime.date(2020, 5, 29), datetime.date(2020, 5, 30)]zz = [7246, 0, 134, 0, 101, 68, 1, 4, 0, 0, 792, 1, 376, 76, 26, 162, 7, 135, 40, 1, 0, 237, 2190, 5, 0, 0, 5, 76, 0, 33, 280, 0, 817, 107, 10, 267, 69, 183, 7254, 0, 128, 1, 97, 149, 10, 34, 0, 0, 1024, 1, 367, 123, 8, 115, 6, 115, 85, 20, 0, 192, 2598, 11, 1, 0, 9, 67, 4, 19, 251, 0, 827, 117, 2, 179, 31, 344, 8138, 0, 85, 0, 177, 174, 0, 17, 0, 0, 1105, 0, 372, 217, 14, 128, 82, 248, 62, 0, 0, 192, 2682, 4, 6, 0, 7, 63, 4, 39, 298, 0, 874, 169, 10, 275, 216, 277, 8304, 0, 131, 1, 128, 206, 0, 32, 0, 0, 1163, 1, 412, 202, 18, 177, 42, 141, 58, 3, 0, 246, 2940, 3, 0, 0, 11, 96, 0, 36, 252, 0, 938, 74, 17, 256, 33, 317]我想在 python 中使用 matplotlib 绘制 bar3d 图,这样 x 轴将为xx,y 轴将为yy以绘制 **zz*,即按日期绘制。按照教程,我尝试了dx = np.ones(len(xx))dy = np.ones(len(yy))dz = np.ones(len(zz))   # doubtax.bar3d(xx, yy, zz, dx, dy, dz, shade=True)显然,我得到了错误  ax.bar3d(xx, yy, zz, dx=dx, dy=dy, dz=dz, shade=True)File "/home/vega/anaconda3/envs/tf01/lib/python3.7/sitepackages/mpl_toolkits/mplot3d/axes3d.py", line 2365, in bar3d  np.atleast_1d(x), y, z, dx, dy, dz)File "<__array_function__ internals>", line 6, in broadcast_arraysFile "/home/vega/anaconda3/envs/tf01/lib/python3.7/sitepackages/numpy/lib/stride_tricks.py", line 264, in broadcast_arrays  shape = _broadcast_shape(*args)File "/home/vega/anaconda3/envs/tf01/lib/python3.7/sitepackages/numpy/lib/stride_tricks.py", line 191, in _broadcast_shape  b = np.broadcast(*args[:32])ValueError: shape mismatch: objects cannot be broadcast to a single shape我想我不理解 bar3D 图元组的正确表述。我请求任何句柄来解决。我浏览了较早的问题,因此我相信这不是重复问题。
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

你目前做错了。只要按照这里的官方例子,你就可以做这样的事情。您需要为每个条形图创建一个包含 x 和 y 点的二维网格。此外,要创建网格,您必须使用数字,然后将刻度标签重置为原始字符串


x = np.arange(len(xx))

y = np.arange(len(yy))


_xx, _yy = np.meshgrid(x, y)

XX, YY = _xx.ravel(), _yy.ravel()


bottom = np.zeros_like(zz)

dx = np.ones(len(XX))

dy = np.ones(len(YY))


ax.bar3d(XX, YY, bottom, dx, dy, zz, shade=True)


ax.set_xticks(range(0, 36, 2))

ax.set_xticklabels(xx[::2])


ax.set_yticks(np.arange(4) + 0.5)

ax.set_yticklabels(yy);


查看完整回答
反对 回复 2022-12-14
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信