-
3D 柱状图
-
按行/列涂颜色
-
柱加阴影、描黑边
-
自定义座标轴名、刻度标签、范围
-
注意
meshgrid
带来的
xx
、
yy
与
acc_flat
之间顺序不匹配的问题,见 [9]。
import numpy as np
import matplotlib
matplotlib.rcParams['font.family'] = 'Times New Roman'
matplotlib.rcParams['mathtext.default'] = 'regular'
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
COLOR = ["blue", "cornflowerblue", "mediumturquoise", "goldenrod", "yellow"]
lambda1 = lambda2 = [10 ** x for x in range(-2, 3)]
x = list(range(len(lambda1)))
y = list(range(len(lambda2)))
x_tickets = [str(_x) for _x in lambda1]
y_tickets = [str(_x) for _x in lambda2]
acc = np.arange(len(x) * len(y)).reshape(len(x), len(y)) + 1
acc = acc / acc.max()
xx, yy = np.meshgrid(x, y)
color_list = []
for i in range(len(y)):
c = COLOR[i]
color_list.append([c] * len(x))
color_list = np.asarray(color_list)
xx_flat, yy_flat, acc_flat, color_flat = \
xx.ravel(), yy.ravel(), acc.T.ravel(), color_list.ravel()
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
ax.bar3d(xx_flat - 0.35, yy_flat - 0.35, 0, 0.7, 0.7, acc_flat,
color=color_flat,
edgecolor="black",
shade=True)
ax.set_xlabel(r"$\lambda_1$")
ax.set_ylabel(r"$\lambda_2$")
ax.set_zlabel("ACC")
ax.set_zlim((0, 1.01))
ax.set_xticks(x)
ax.set_xticklabels(x_tickets)
ax.set_yticks(y)
ax.set_yticklabels(y_tickets)
plt.tight_layout()
fig.savefig("bar3d.png", bbox_inches='tight', pad_inches=0)
plt.close(fig)
- Demo of 3D bar charts
- 3D plots as subplots
- matplotlib实现三维柱状图
- 第三十一章 3D 条形图
- Grouped bar chart with labels
- apply color map to mpl_toolkits.mplot3d.Axes3D.bar3d
- List of named colors
- How to make bar3d plot with transparent faces and non-transparent edges?
- numpy meshgrid顺序问题
names = ['电影1', '电影2', '电影3']
real_num1 = [7548, 4013, 1673]
real_num2 = [5453, 1840, 1080]
real_num3 = [4348, 2345, 1890]
x = np.arange(len(names))
# 绘制柱形图
width = 0.3
plt.bar(x, real_num1, alpha=0.5, width=width,
将坐标网格化, X=[0,1,2,3,4],Y=[0,1,2,3,4,5,6,7,8]网格化的结果,如下图所示。代码中的bottom是用来设置绘制每一个柱子的Z坐标的,在此全部都设置为0,而width和height设置每一个柱子的长和宽。如下图所示,X坐标取值为[0,1,2,3,4],Y坐标取值为[0,1,2,3,4,5,6,7,8],每一个(X,Y)组合的值Z=X+Y,所需要绘制的图就是在X,Y所对应的坐标位置上面根据Z的值来绘制柱形图。X,Y:柱子在XY平面的起始坐标。(1)构造需要显示的数据。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 绘图设置
fig = plt.figure()
ax = fig.gca(projection='3d')...
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),
学习3D绘图的想法来自科研绘图中。我从事的专业是古植物学,也就是和植物化石打交道。化石有三大信息:1.物种信息,也就是它的分类学价值;2.时间信息,也就是它的存在时间;3.地理信息,即它在过去某时存在于某地。要想在一张图里展示同时展示这些信息并不容易,因为研究工作通常涉及一个类群,该类群存在的化石记录少则几条,多则几百条,如何合理地展示出来是一项不小的考验。首先回顾一下化石的三大信息:物种、时间、地理。
python使用matplotlib可视化3D柱状图(3D bar plot、三维柱状图、包含三个坐标轴x、y、z)、设置zdir参数为y、改变3d图观察的角度