gpt4 book ai didi

python - 在 Python 中使用 Matplotlib 制作 4 维散点图

转载 作者:行者123 更新时间:2023-11-30 22:00:03 25 4
gpt4 key购买 nike

本质上,我正在尝试制作一个包含 4 列数据的 4 维散点图(请参阅下面的示例)。

X (mm)  Y (mm)  Z (mm)  Diameter (mm)
11.096 11.0972 13.2401 124.279
14.6836 11.0389 8.37134 138.949
19.9543 11.1025 31.1912 138.949
15.4079 10.9505 31.1639 152.21
20.6372 14.5175 6.94501 152.211
20.47 11.225 31.3612 152.211
19.0432 11.3234 8.93819 152.213
29.4091 10.1331 26.6354 186.417
12.9391 10.6616 28.9523 186.418
29.9102 10.4828 25.1129 186.418
30.5483 12.163 15.9116 186.418
19.0631 10.5784 30.9791 186.418
9.65332 10.8563 12.975 186.419
8.4003 11.0417 17.0181 186.419
26.0134 10.6857 9.41572 186.419
13.7451 11.1495 28.7108 186.419

前三列数据(X、Y、Z)是第四列数据(直径)的坐标位置,因此我能够生成这些位置的 3-D 散点图。但是,我尝试根据某些阈值(即小于 100 毫米的直径为红色,101-200 毫米为蓝色,201-300 毫米为绿色等)用不同颜色标记绘制这些直径。标记的颜色确定后,它将根据其 X、Y、Z 坐标绘制这些标记。我尝试编写一个简单的 for 循环来执行此操作,但由于某种原因,它变得非常慢/滞后,并且也只会绘制一种颜色。谁能看看我的方法是否有问题?谢谢!

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import pandas
import os

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

os.chdir(r'C:\Users\Me\Documents')
data = pandas.read_excel("Diameter Report", "Data")

X = data['X (mm)'].values.tolist()
Y = data['Y (mm)'].values.tolist()
Z = data['Z (mm)'].values.tolist()
dims = data['Diameter (mm)'].values.tolist()

for i in dims:
if i < int(100):
ax.plot(X, Y, Z, c='r', marker='o')
elif i >= int(101) and i <200:
ax.plot(X, Y, Z, c='b', marker='o')
elif i >= int(201) and i <300:
ax.plot(X, Y, Z, c='g', marker='o')

ax.set_xlabel('Center X (mm)')
ax.set_ylabel('Center Y (mm)')
ax.set_zlabel('Center Z (mm)')

plt.show()

Resulting plot

最佳答案

这些值的阈值似乎是等距的,因此您只需除以 100 并截断更多小数位即可。这允许绘制单个散点图而不是数百个图。

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import pandas

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

data = pandas.read_excel("Diameter Report", "Data")

X = data['X (mm)'].values
Y = data['Y (mm)'].values
Z = data['Z (mm)'].values
dims = data['Diameter (mm)'].values

ax.scatter(X,Y,Z, c=(dims/100).astype(int), marker="o", cmap="brg")

ax.set_xlabel('Center X (mm)')
ax.set_ylabel('Center Y (mm)')
ax.set_zlabel('Center Z (mm)')

plt.show()

更一般的任意边界情况可能最好使用 BoundaryNorm 和具有与分类一样多的不同颜色的颜色图来解决。

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import pandas as pd

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

d = np.random.rand(10,4)
d[:,3] = np.random.randint(1,300, 10)
data = pd.DataFrame(d, columns=["X (mm)","Y (mm)","Z (mm)","Diameter (mm)"])

X = data['X (mm)'].values
Y = data['Y (mm)'].values
Z = data['Z (mm)'].values
dims = data['Diameter (mm)'].values

bounds = [0,100,200,300]
colors = ["b", "r", "g"]
cmap = mcolors.ListedColormap(colors)
norm = mcolors.BoundaryNorm(bounds, len(colors))

sc = ax.scatter(X,Y,Z, c=dims, marker="o", cmap=cmap, norm=norm)

ax.set_xlabel('Center X (mm)')
ax.set_ylabel('Center Y (mm)')
ax.set_zlabel('Center Z (mm)')
fig.colorbar(sc)
plt.show()

enter image description here

关于python - 在 Python 中使用 Matplotlib 制作 4 维散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com