我试图从x,y,z点列表制作3D图,我想根据第四个变量rho的值绘制颜色.
目前我有;
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot3D(cell_x, cell_y, cell_z, linestyle='None', marker='o', markersize = 5, antialiased=True)
ax.set_xlim3d(0.45, 0.55)
ax.set_ylim3d(0.45, 0.55)
ax.set_zlim3d(0.45, 0.55)
Run Code Online (Sandbox Code Playgroud)
如何添加cell_rho(我的第四个数组)作为我的x,y,z点的颜色?(例如喷射色图).
非常感谢你.
编辑:我不能使用散点图因为我的18000点散点图与仅带标记的plot3d相比非常慢.
我遇到了在x,y,z轴上获取数据的问题.我的代码是我的代码.我为不同的轴定义范围(dx,dy.dz)的方式是否有任何问题.
result=[['122', '109', '2343', '220', '19'],
['15', '407', '37', '10', '102'],
['100', '100', '100', '100', '100'],
['113', '25', '19', '31', '112'],
['43', '219', '35', '33', '14'],
['132', '108', '256', '119', '14'],
['22', '48', '352', '51', '438']]
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import matplotlib.dates as dates
def format_date(x, pos=None):
return dates.num2date(x).strftime('%m/%d/%Y')
fig=plt.figure()
ax1=fig.add_subplot(111,projection='3d')
xpos=[10/11/2013,10/12/2013,10/13/2013,10/14/2013,10/15/2013]
ypos=['A1','C1','G1','M1','M2','M3','P1']
zpos=result
dx=[5]
dy=[7]
dz=[7]
ax1.w_xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
ax1.bar3d(xpos,ypos,zpos,dx,dy,dz,color='#00ceaa')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError Traceback (most recent call last)
<ipython-input-45-02cd8e7ee228> in <module>()
18 dz=[17] …Run Code Online (Sandbox Code Playgroud) 我想绘制一个似然分布,基本上是一个NxT矩阵,其中每一行代表每个时间步长t (t=0...T) 中某个变量的分布,这样我就可以可视化最大似然估计的轨迹屈服。
我想象了几个二维图,一个在另一个前面 - 像这样:

到目前为止,基于这个我已经试过:
def TrajectoryPlot(P):
P=P[0:4]
fig = plt.figure()
ax = fig.gca(projection='3d')
def cc(arg):
return colorConverter.to_rgba(arg, alpha=0.6)
xs = np.arange(0, len(P[0]))
verts = []
zs = [0.0, 1.0, 2.0, 3.0, 4.0]
for i in range(len(P)):
print(i)
verts.append(list(zip(xs, P[i])))
poly = PolyCollection(verts, facecolors=[cc('r'), cc('g'), cc('b'),
cc('y')])
poly.set_alpha(0.7)
ax.add_collection3d(poly, zs=zs, zdir='y')
ax.set_xlabel('X')
ax.set_ylabel('Likelihood')
ax.set_zlabel('Time')
plt.show()
Run Code Online (Sandbox Code Playgroud)
但这还行不通。
我无法找到在我的iPython笔记本中为matplotlib中的3d条形图设置cmap(或颜色)的正确方法.我可以在X和Y平面上正确设置我的图表(28 x 7标签),并带有一些随机Z值.该图很难解释,一个原因是x_data标签[1,2,3,4,5]的默认颜色都是相同的.
这是代码:
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as npfig = plt.figure(figsize=(18,12))
ax = fig.add_subplot(111, projection='3d')
x_data, y_data = np.meshgrid(np.arange(5),np.arange(3))
z_data = np.random.rand(3,5).flatten()
ax.bar3d(x_data.flatten(),
y_data.flatten(),np.zeros(len(z_data)),1,1,z_data,alpha=0.10)
Run Code Online (Sandbox Code Playgroud)
产生以下图表:
我不想手动为标签x_data定义颜色.如何为x_data中的每个标签设置不同的"随机"cmap颜色,仍然保留
ax.bar3d
参数?以下是使用的变体
ax.bar
我有一个 Trimesh 对象,但我不知道如何绘制它。我的目标是 mplot3d 中的 Axes3D.plot_trisurf() 函数会产生类似的结果(见下文)。Trimesh 对象甚至有一个包含面的属性,但我不知道从哪里获取网格点的坐标。
感谢您的任何想法!
我试图绘制随时间变化的3D线轨迹,我希望颜色发生变化以显示时间的流逝(例如,从浅蓝色到深蓝色)。但是,明显缺少使用matplotlib的教程Line3DCollection。这是我能找到的最接近的,但我得到的只是一条白线。
这是我的代码。
import matplotlib.pyplot as plot
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection
import numpy as np
# X has shape (3, n)
c = np.linspace(0, 1., num = X.shape[1])[::-1]
a = np.ones(shape = c.shape[0])
r = zip(a, c, c, a) # an attempt to make red vary from light to dark
# r, which contains n tuples of the form (r,g,b,a), looks something like this:
# [(1.0, 1.0, 1.0, 1.0),
# (1.0, …Run Code Online (Sandbox Code Playgroud) 编辑:我设法弄清楚发生了什么。散点图有一个参数“线宽”(lw=n),它决定了散点图绘制点周围的线的粗细。因为我的绘图点的大小为 1 (s=1),所以线宽太粗了,实际上覆盖了绘图点的颜色。将线宽设置为 0 (lw=0) 的厚度应该可以解决问题。
我想生成数据点的 3d 散点图,根据它们的 y 坐标值对它们进行着色,但我无法使这些点实际着色。
如果数据点的值较低,则颜色应更接近色谱的蓝端。如果该值较高,则颜色应更接近光谱的红端。
我已经设法在 2D 中绘制了我想要的内容,但是在 3D 中复制该过程时遇到了麻烦。当前代码仅将点绘制为黑色。
这是我的 3D 尝试代码,以及 2D 中所需结果的屏幕截图。我到底做错了什么?
x_points、y_points 和 z_points 是浮点值列表。
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
def three_dimensional_scatterplot(
self, x_points, y_points, z_points, data_file
):
cm1 = cm.get_cmap('gist_rainbow')
fig = plt1.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(
x_points,
y_points,
z_points,
s=1,
c=y_points,
cmap=cm1
)
ax.set_xlabel('X axis')
plt1.show()
Run Code Online (Sandbox Code Playgroud)
如果我在 Matplotlib 中制作 3d 绘图:
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d')
x_labels = [10,20,30]
x = [1,2,3,4]
y = [3,1,5,1]
legend = False
for label in x_labels:
x_3d = label*np.ones_like(x)
ax.plot(x_3d, x, y, color='black', label='GMM')
if legend == False:
ax.legend()
legend = True
ax.set_zlabel('test')
Run Code Online (Sandbox Code Playgroud)
它将产生:
左侧有过多的空白。我想知道是否有可能摆脱它?
我无法将 3d 图形的背景更改为黑色。这是我目前的代码。当我将 facecolor 设置为黑色时,它会将图形内部更改为灰色,这不是我想要的。
fig = plt.figure()
fig.set_size_inches(10,10)
ax = plt.axes(projection='3d')
ax.grid(False)
ax.xaxis.pane.set_edgecolor('b')
ax.yaxis.pane.set_edgecolor('b')
ax.zaxis.pane.set_edgecolor('b')
# plt.gca().patch.set_facecolor('white')
# plt.axis('On')
fig.patch.set_facecolor('black')
ax.scatter(xs = Z['PC1'], ys = Z['PC2'], zs = Z['PC3'], c = Z['color'], s = 90, depthshade= False)
ax.set(title = 'test', xlabel = 'PC1', ylabel = 'PC2', zlabel = 'PC3')
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此方法更改 mpl_toolkits.mplot3d 图中的气候:
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
p = ax.scatter(x_, y_, z_, c='gray', s=0.25, alpha='0.5')
cbar = fig.colorbar(p)
cbar.set_clim(0,1)
Run Code Online (Sandbox Code Playgroud)
这不起作用并给出弃用警告:MatplotlibDeprecationWarning:set_clim 函数在 Matplotlib 3.1 中已弃用,并将在 3.3 中删除。改用 ScalarMappable.set_clim。
有没有人想出如何更改 Axes3D 图中的颜色条限制?
提前致谢!