我想为我的 Pyplot 图添加背景,使其看起来大致如下所示:
据我所知,向图形添加颜色渐变有点棘手,因此想法是拉伸轴以填充整个图形,然后添加背景图像或类似于轴的图像。
但是,我既无法让轴填充整个图形,如下面的代码示例所示,也不知道如何设置颜色渐变背景,或在图形后面设置图像。
这就是我现在生成的:
import numpy as np
import matplotlib.pyplot as plt
import mypyplot
x, y, z = np.random.rand(30).reshape((3, 10))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)
fig.set_facecolor('green')
ax.set_facecolor('gray')
ax.set_position([0, 0, 1, 1])
plt.show()
使用这个
ax.imshow([[0,0],[1,1]], cmap=plt.cm.Greens, interpolation='bicubic', extent=(-1, 1, -1, 1))
我可以在整个轴上、数据下方绘制图像,但不能在轴标签、网格等下方绘制图像。有没有聪明的方法可以做到这一点?
您可以为背景创建一个额外的子图。并通过
imshow()
放置渐变。如果先创建背景子图,它将位于主子图的后面。然后将主要子图的背景设为透明。
import numpy as np
import matplotlib.pyplot as plt
x, y, z = np.random.rand(30).reshape((3, 10))
fig = plt.figure()
ax_bg = fig.add_axes([0, 0, 1, 1]) # background subplot filling the figure
ax_bg.imshow([[1, 1], [0, 0]], cmap='Greens', aspect='auto', interpolation='bicubic')
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)
ax.set_facecolor('none') # make transparent
plt.show()