我有一个3D散点图,有变量A,B,C。我想突出显示图的象限,在该象限中,点高于A,B,C的平均值。
目前,我有一个散点图,其中的平均值是每个变量的线。红线是B的平均值,蓝色是A的平均值。两条线都在C的平均值的高度。
因此,重要的点在红线后面,在蓝线前面和两条线的上方。我不确定这是否是显示数据的直观方式。我想我可以添加一个平原到这个地区,以突出它,但我不知道如何做到这一点。
我还需要添加标签的点,我不知道如何做到这一点。我猜应该是这样的
for i in range(len(df)):
x = m[i,0]
y = m[i,1]
z = m[i,2]
label = i
ax.scatter(x,y,z, color='b')
ax.text(x,y,z, '%s' % (label), size=20, zorder=1, color='k')
但我不知道这是如何工作的,所以我不知道如何适应我的需要。
我的完整代码如下;
import numpy as np
import pandas as pd
import random
import string
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Sample Dataframe
names=[]
df = pd.DataFrame(np.random.randint(0,200,size=(200, 3)), columns=list('ABC'))
for item in df['A']:
names.append(random.choice(string.ascii_letters))
df['name']=names
df.head(2)
# Plotting
plt.rcParams["figure.figsize"] = (20,10)
x = df['A']
y = df['B']
z = df['C']
# create the figure
fig = plt.figure()
# add axes
ax = fig.add_subplot(111,projection='3d')
ax.scatter(x,y,z, s=60)
# make lines
xline = [(df['A'].max(),0), (df['B'].mean(),df['B'].mean()),(df['C'].mean(),df['C'].mean())]
ax.plot(xline[0], xline[1], xline[2], 'r')
yline = [(df['A'].mean(),df['A'].mean()), (df['B'].max(),0),(df['C'].mean(),df['C'].mean())]
ax.plot(yline[0], yline[1], yline[2], 'b')
# label the axes
ax.set_xlabel("A")
ax.set_ylabel("B")
ax.set_zlabel("C")
plt.show()
1条答案
按热度按时间6rvt4ljy1#
我建议去掉这些行,而是将数据过滤到“重要”和“不太重要”的集合中。然后,两者都可以单独绘制,具有不同的颜色和/或大小。
我还为这个过滤的数据集添加了一个标签方法。