r - R Plotly 链接子图,带有百分比直方图和彩色类别
问题描述
的背景
我在 R 中使用 plotly API 创建两个链接图。第一个是散点图,第二个是条形图,应该显示当前选择中属于每个类别的数据的百分比。我无法使百分比按预期运行。
问题
绘图正确渲染,交互式选择工作正常。当我在顶部散点图中选择一组数据点时,我想查看该选择中属于每个类别的百分比。相反,我看到的是该类别中该选择中属于该类别的点的百分比,换句话说,始终是 100%。我想这是因为我设置color = ~c
了将分组应用于类别的设置。
这个例子
这是一个可重复的示例。首先创建一些虚拟数据。
library(plotly)
n = 1000
make_axis = function(n) c(rnorm(n, -1, 1), rnorm(n, 2, 0.25))
data = data.frame(
x = make_axis(n),
y = make_axis(n),
c = rep(c("A", "B"), each = n)
)
创建一个sharedData
对象并将其提供给plot_ly()
基础图。
shared_data = data %>%
highlight_key()
baseplot = plot_ly(shared_data)
制作单独的面板。
points = baseplot %>%
add_markers(x = ~x, y = ~y, color = ~c)
bars = baseplot %>%
add_histogram(x = ~c, color = ~c, histnorm = "percent", showlegend = FALSE) %>%
layout(barmode = "group")
并将它们放在一个带有选择和突出显示的链接子图中。
subplot(points, bars) %>%
layout(dragmode = "select") %>%
highlight("plotly_selected")
旁白
顺便说一句,当我开始时histnorm = ""
,add_histogram()
我更接近预期的行为,但我确实想要百分比而不是计数。当我删除时color = ~c
,我会更接近预期的行为,但我确实想要一致的配色方案。
我试过什么
我尝试手动提供颜色,但随后一些链接的选择中断。我尝试先从sharedData
对象创建一个单独的汇总数据集,然后再绘制它,但这又打破了图之间的联系。
如果有人对如何解决这个问题有任何线索,我将不胜感激。
解决方案
对我来说,您正在寻找的行为似乎没有在情节中实现。
请参阅schema()
:对象 ► 轨迹 ► 直方图 ► 属性 ► histnorm ► 描述
但是,这是我能够通过add_bars
和处理数据获得的最接近的结果(抱歉添加data.table
,您将能够在基本 R 中执行相同操作,只是个人喜好):
library(plotly)
library(data.table)
n = 1000
make_axis = function(n) c(rnorm(n, -1, 1), rnorm(n, 2, 0.25))
DT = data.table(
x = make_axis(n),
y = make_axis(n),
c = rep(c("A", "B"), each = n)
)
DT[, grp_percent := rep(100/.N, .N), by = "c"]
shared_data = DT %>%
highlight_key()
baseplot = plot_ly(shared_data)
# Make the individual panels.
points = baseplot %>%
add_markers(x = ~x, y = ~y, color = ~c)
bars = baseplot %>%
add_bars(x = ~c, y = ~grp_percent, color = ~c, showlegend = FALSE) %>%
layout(barmode = "group")
subplot(points, bars) %>%
layout(dragmode = "select") %>%
highlight("plotly_selected")
不幸的是,由此产生的 hoverinfo 并不是真正可取的。
推荐阅读
- python - Python:迭代不同大小的数组
- java - 我可以告诉杰克逊根据不同类型的方法有条件地序列化私有实例变量吗?
- python - 如何在没有子导入的情况下导入模块
- python - pyqt5 "AttributeError: type object 'Window' has no attribute label" 但它有吗?
- microsoft-graph-api - 从客户端调用时,Microsoft 图形转换内容端点失败
- python-3.x - 在 url 前添加额外的字符串
- excel - 运行时错误 438:此对象不支持此属性或方法”
- angular - Angular 控制器未在浏览器中加载
- intellij-idea - IntelliJ 没有使用正确的插件注册文件类型
- javascript - 在 laravel 项目上测试 API 时如何绕过身份验证级别?