在应用主成分分析或线性判别分析后,我很难使用 Matplotlib 来可视化我的数据在 3 维中的重投影结果。做散点图后,我无法在缩放时轻松旋转数据或更改视角(即使缩放后旋转轴保持不变,如果缩放太多点就会消失),并且每次更改都需要一秒钟。Matplotlib 非常有用,但对于这个特定用例,它开始变得非常令人沮丧,因为它可能不是为此类任务设计的。Python 中的 Matplotlib 是否有替代品可以更好地处理 3d 散点图,并且可以在云中流畅地导航?
下图显示了一个示例。我在对应于特定类的每个数据簇周围绘制了球体,并用红色着色重叠球体。现在我想看看这些球体是如何相交的。我认为 Matplotlib 最大的问题是它不允许用鼠标移动整个图形,它只允许围绕一个固定点旋转,一旦你放大一点,这会让事情变得非常混乱。
我在 python 中有一个 3D 图,我ax.scatter(x,y,z,c='r',s=100)
从
import matplotlib.pyplot as plt
import pylab
from mpl_toolkits.mplot3d import Axes3D.
Run Code Online (Sandbox Code Playgroud)
我想用一条线连接我的点。我知道你可以用它来做,marker='-o'但这对我来说只适用于 2D 而不是 3D。任何人都可以帮忙吗?谢谢你。
我想在一个循环中绘制多个迹线而不会覆盖所有先前的迹线。
在2015 年的这篇文章中,提出了通过evaluate = TRUE在plot_ly或add_trace函数中进行设置来在循环中添加跟踪的解决方案。但是,截至2017年,在较新版本的plot_ly中,evaluate它不是属性。
'scatter3d' objects don't have these attributes: 'evaluate'
Run Code Online (Sandbox Code Playgroud)
这个问题和这个问题也未能回答问题。这篇文章承认valuate = TRUE不适用于新的plotly,但没有给出解决方案。这个问题的新解决方案是什么?
我的复制/粘贴数据:
structure(list(x_1 = c(74.651438, 75.31493, 76.736865, 77.858125,
79.347856, 80.302483), y_1 = c(249.063605, 247.149121, 245.461889,
243.811041, 242.382685, 240.300034), z_1 = c(4.373868, 3.653744,
4.101455, 4.134471, 4.225507, 4.890157), x_2 = c(85.468712, 86.637469,
87.993127, 87.907308, 88.748766, 89.680155), y_2 = c(249.063405,
247.145423, 245.46148, 244.949469, 244.005001, 242.917665), z_2 = c(4.56633,
4.059976, 3.842906, 4.019021, 4.316799, 4.378894), x_3 = c(101.720648,
101.70598, …Run Code Online (Sandbox Code Playgroud) 我尝试在Python中使用字符串类别(即神经网络的激活函数和求解器)对x和y以及z轴上的浮点数(即NN的精度得分)进行3D散点图.
以下示例引发错误:ValueError:无法将字符串转换为float:'str1'
我按照这个文档描述了3D图:https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html
任何想法,可能是什么问题?提前谢谢了!
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xs=['str1', 'str2']
print(type(xs))
ys=['str3', 'str4']
print(type(ys))
zs=[1,2]
ax.scatter(xs, ys, zs)
Run Code Online (Sandbox Code Playgroud) 在 Julia 中工作并使用Plots,我有一组位于两个不同表面上的点。这些点混合在一起,使得绘制表面图看起来很垃圾,因为它试图连接两个表面上的点。我认为解决这个问题的最好方法是将点简单地绘制为空间中的点。
如何在 3D 中绘制点而不通过表面连接它们?
我正在做 PCA,有 10 个组件。我想根据它们的组类型绘制前 3 个组件和颜色。
from mpl_toolkits.mplot3d import Axes3D
df=pd.DataFrame(np.random.rand(30,20))
grp=round(pd.DataFrame(np.random.rand(30)*10),0)
df['grp']=grp
fig = plt.figure(figsize=(12, 9))
ax = Axes3D(fig)
y = df.iloc[:,1]
x = df.iloc[:,0]
z = df.iloc[:,2]
c = df['grp']
ax.scatter(x,y,z, c=c, cmap='coolwarm')
plt.title('First 3 Principal Components')
ax.set_ylabel('PC2')
ax.set_xlabel('PC1')
ax.set_zlabel('PC3')
plt.legend()
Run Code Online (Sandbox Code Playgroud)
这是可行的,但不幸的是并没有显示一个传说,也不相信所有可能的群体。
我正在使用 Python 中的 Plotly 显示昏暗缩减的词嵌入的一部分。我正在使用 3D 散点图,到目前为止一切正常,使用以下代码(已分解):
fig = go.Figure()
trace = go.Scatter3d(
x=df[0],
y=df[1],
z=df[2],
text=df.index,
mode="markers+text",
textfont=dict(
color=["crimson"]),
marker=dict(
size=3),
hoverinfo="skip")
fig.add_trace(trace)
fig.show()
Run Code Online (Sandbox Code Playgroud)
我遇到的唯一问题是数据点的某些标签重叠,这导致它们乍一看不可读。
是否可以指定文本标签的背景颜色?
编辑:
我的前 5 行df看起来像这样,所有数据都是这样构造的。索引是单词,三列是它在 3D 空间中的位置。
0 1 2
chancellor 1.102989 0.416767 2.071260
abdicate 0.028073 1.156498 1.911484
overthrow 2.435294 -0.305266 0.998094
candidate 0.259697 0.648845 0.448700
elections 0.122355 0.815206 1.107913
Run Code Online (Sandbox Code Playgroud)
然而,我的问题实际上并不是关于数据,而是关于定制可视化的可能性。
编辑2:
这就是我的情节。
正如您在左下角的簇中看到的,大多数标签相互重叠。我现在希望有一个隐藏参数可以用来使这些标签更好地可见,并且我本能地寻找一种方法为所有这些标签添加白色背景,这样就可以遮挡后面数据点的标签他们。
import plotly.graph_objects as go
import numpy as np
import numpy
# Download data set from plotly repo
pts = np.loadtxt(np.DataSource().open('https://raw.githubusercontent.com/plotly/datasets/master/mesh_dataset.txt'))
x, y, z = pts.T
US = [(1970, 4688.5), (1971, 4559.4), (1972, 4807.0), (1973, 4994.6), (1974, 4827.4), (1975, 4612.5), (1976, 4907.3),
(1977, 5071.4), (1978, 5066.2), (1979, 5105.1), (1980, 4877.4), (1981, 4808.0), (1982, 4562.2), (1983, 4541.5),
(1984, 4751.8), (1985, 4777.2), (1986, 4736.6), (1987, 4893.1), (1988, 5114.1), (1989, 5171.4), (1990, 5063.9),
(1991, 5022.3), (1992, 5103.5), (1993, 5222.5), (1994, 5305.7), (1995, 5357.6), (1996, …Run Code Online (Sandbox Code Playgroud) 我正在使用plotly.graph_object 来绘制3D 散点图。我想根据类别字符串值定义标记颜色。类别值为 A2、A3、A4。下面的代码如何修改?谢谢
这是我所做的:
import plotly.graph_objects as go
x=df_merged_pc['PC1']
y=df_merged_pc['PC2']
z=df_merged_pc['PC3']
color=df_merged_pc['AREA']
fig=go.Figure(data=[go.Scatter3d(x=x,y=y,z=z,mode='markers',
marker=dict(size=12,
color=df_merged_pc['AREA'],
colorscale ='Viridis'))])
fig.show()
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
ValueError:
Invalid element(s) received for the 'color' property of scatter3d.marker
Invalid elements include: ['A3', 'A3', 'A3', 'A3', 'A3', 'A3', 'A3', 'A2', 'A2', 'A2']
Run Code Online (Sandbox Code Playgroud) 使用Plotly Scatter3D 时,默认的鼠标悬停效果会显示一种坐标十字准线。有没有办法去除这种效果并只显示工具提示?
scatter3d ×10
python ×6
plotly ×5
matplotlib ×4
python-3.x ×2
colors ×1
julia ×1
pandas ×1
plot ×1
r ×1
scatter-plot ×1