如何让Plotly 3D散点图标记大小基于坐标点出现频率?
让Plotly 3D散点图标记大小随坐标出现频率变化的实现方法
1. 统计坐标点的出现频率
首先需要对原始数据按Rating_1、Rating_2、Rating_3的组合分组,统计每组的出现次数(即频率)。因为同一坐标组合的Quality值是固定的(由三个Rating的乘积决定),直接保留即可。
用dplyr实现
# 安装并加载dplyr(如果未安装) install.packages("dplyr") library(dplyr) # 统计每组的出现次数 DF_freq <- DF %>% group_by(Rating_1, Rating_2, Rating_3) %>% summarise( Quality = first(Quality), Count = n() ) %>% ungroup()
用Base R实现
如果不想依赖dplyr,可使用基础R函数:
DF_freq <- aggregate(ID ~ Rating_1 + Rating_2 + Rating_3 + Quality, data = DF, FUN = length) colnames(DF_freq)[5] <- "Count" # 将统计列重命名为Count
2. 绘制带频率缩放标记的3D散点图
基于统计后的数据集,将标记大小绑定到Count列,并调整缩放参数让显示更合理:
library(plotly) plot_ly(DF_freq, x = ~Rating_1, y = ~Rating_2, z = ~Rating_3, color = ~Quality, type = "scatter3d", mode = "markers", marker = list( symbol = "circle", size = ~Count, sizemode = "diameter", # 按直径缩放,可选"area"按面积缩放 sizeref = max(DF_freq$Count)/20, # 控制最大标记的大小,可按需调整 sizemin = 3 # 设置最小标记尺寸,避免低频点过小 )) %>% add_markers(text = ~paste("Quality:", Quality, "\n出现次数:", Count)) %>% layout(scene = list(xaxis = list(title = "Novel"), yaxis = list(title = "Benefit"), zaxis = list(title = "Feasible")), title = "Quality Of Ideas(标记大小对应坐标出现频率)")
关键说明
sizeref的作用是缩放标记大小,公式为显示尺寸 = Count / sizeref,可以根据实际视觉效果调整数值。- 鼠标悬停时会显示对应的Quality和出现次数,方便查看细节。
内容的提问来源于stack exchange,提问作者Smuts94
相关产品推荐
相关产品推荐

