我有一个包含以下值的数据框,并希望创建一个3D图,显示按类别/忠诚度级别(青铜、银、黄金、白金)标记的最近、频率和货币值。相关数据如下所示:RFMScores.head()
X1 M1 N1 X是与忠诚度级别相关联的数字分数
在制作图表时,我使用了
figrfm2 = plt.figure()
ax = Axes3D(figrfm2)
xs = RFMScores.Recency
ys = RFMScores.Frequency
zs = RFMScores.Monetary
scores = RFMScores.RFM_Catagory_Level
scatter = ax.scatter(xs, ys, zs,c=scores,cmap='tab20b')
ax.set_title("3D plot")
ax.set_xlabel('Recency')
ax.set_ylabel('Frequency')
ax.set_zlabel('Monetary')
ax.legend(*scatter.legend_elements())
plt.show()
但图例中显示的是数值,而不是实际的标签。
当我尝试使用RFM_Loyalty_Level
时,如下所示:
figrfm2 = plt.figure()
ax = Axes3D(figrfm2)
xs = RFMScores.Recency
ys = RFMScores.Frequency
zs = RFMScores.Monetary
scatter = ax.scatter(xs, ys, zs,c=RFMScores.RFM_Loyalty_Level,cmap='tab20b')
ax.set_title("3D plot")
ax.set_xlabel('Recency')
ax.set_ylabel('Frequency')
ax.set_zlabel('Monetary')
ax.legend(*scatter.legend_elements())
plt.show()
图表为空,没有数据。如何解决此问题,使图表中的标签类别为“platinum,gold,银,bronze”,而不是图例中的数值?
1条答案
按热度按时间siv3szwd1#
我找到了解决方案here
关键(不是双关语)是创建一个两列的字典,然后将句柄和键传递到
legend(handles=,labels=)
参数中。解决方案如下,但请查看原始答案的链接,并给予适当的信任。