使用数据列设置标记像素大小
Posted
技术标签:
【中文标题】使用数据列设置标记像素大小【英文标题】:Set marker pixel size in plotly using a column of your data 【发布时间】:2017-09-16 05:46:25 【问题描述】:我正在尝试使用数据中的列设置标记大小,但是值为 1、2、5 等的标记大小会根据基础数据而变化。是否可以使用精确的像素大小设置标记的大小?这样,当我的数据更改时,相同大小的标记将始终具有相同的关联值,而不管基础数据如何。
这是一个简单的例子:
第一个显示所有标记都很大(绝对不是您从变量 n
解释的 1px。
library(plotly)
dat <- data.frame(y=factor(c(1,1,2,2),levels=c(1,2),labels=c("GRP1","GRP2")),
x=c(1,2,3,4),
n=c(1,1,1,1),
grp=c("GRP1","GRP1","GRP2","GRP2"))
plot_ly(dat) %>%
add_markers(x = ~x,
y = ~y, color = ~grp,
size = ~n,
opacity = .7) %>%
layout(showlegend=F)
第二个已调整大小,但仅在一组中。两组之间的大小为 1 略有不同。
dat2 <- data.frame(y=factor(c(1,1,2,2),levels=c(1,2),labels=c("GRP1","GRP2")),
x=c(1,2,3,4),
n=c(1,2,1,1),
grp=c("GRP1","GRP1","GRP2","GRP2"))
plot_ly(dat2) %>%
add_markers(x = ~x,
y = ~y, color = ~grp,
size = ~n,
opacity = .7) %>%
layout(showlegend=F)
我尝试使用 sizes
和 marker=list(sizeref=0.1,sizemode="area")
选项,但这些选项似乎只能解决部分问题。
plot_ly(dat2) %>%
add_markers(x = ~x,
y = ~y, color = ~grp,
size = ~n,
sizes = c(10,50),
opacity = .7) %>%
layout(showlegend=F)
plot_ly(dat2) %>%
add_markers(x = ~x,
y = ~y, color = ~grp,
size = ~n,
marker=list(sizeref=0.1, sizemode="area"),
opacity = .7) %>%
layout(showlegend=F)
我正在寻找一种简单的方法来提供每个标记的大小,方法是明确地给出以像素为单位的大小。我还尝试在size = ~n
中删除~
,但这只会给我一个错误。我错过了什么……这可能吗?
谢谢。
编辑:
这个例子清楚地说明了这个问题,注意我将大小乘以 400,dat2
的定义如上:
plot_ly(dat2) %>%
add_markers(x = ~x,
y = ~y, color = ~grp,
size = ~I(400*n),
text = ~paste0("Size of marker: ",n),
opacity = .7,
type="scatter") %>%
layout(showlegend=F)
两个蓝点(大小为 400*1)与第一个绿点(大小为 400*1)大小不同。
> sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices datasets utils methods base
other attached packages:
[1] plotly_4.5.6 ggplot2_2.2.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.10 knitr_1.15.1 magrittr_1.5 munsell_0.4.3 colorspace_1.3-2 viridisLite_0.2.0
[7] R6_2.2.0 stringr_1.2.0 httr_1.2.1 plyr_1.8.4 dplyr_0.5.0 tools_3.3.3
[13] grid_3.3.3 gtable_0.2.0 DBI_0.6-1 htmltools_0.3.5 yaml_2.1.14 lazyeval_0.2.0
[19] assertthat_0.2.0 digest_0.6.12 rprojroot_1.2 tibble_1.3.0 purrr_0.2.2 RColorBrewer_1.1-2
[25] tidyr_0.6.1 base64enc_0.1-3 htmlwidgets_0.8 evaluate_0.10 rmarkdown_1.4 stringi_1.1.5
[31] backports_1.0.5 scales_0.4.1 jsonlite_1.4
【问题讨论】:
这是一个情节相关的问题,我认为你可以删除闪亮的标签 由于反应性闪亮对象而存在问题...可以更改基础数据,并且新绘图会绘制不同大小的标记。无论来自闪亮的反应对象的数据如何,我都希望 1 或 2 的大小完全相同。 如果是这样,请发布一个使用闪亮的最小可重现示例 【参考方案1】:根据github 上的cpsievert 的答案是在marker
参数中使用size
的低级控件:
plot_ly(x = 1:4, y = 1:4, size = 1:4, marker = list(size = 4:1 * 10, sizemode = "diameter"))
使用他的示例,我的代码现在变为:
library(plotly)
dat <- data.frame(y=factor(c(1,1,2,2),levels=c(1,2),labels=c("GRP1","GRP2")),
x=c(1,2,3,4),
n=c(1,1,1,1),
grp=c("GRP1","GRP1","GRP2","GRP2"))
plot_ly(dat) %>%
add_markers(x = ~x,
y = ~y, color = ~grp,
marker = list(size=~I(n*10)),
opacity = .7) %>%
layout(showlegend=F)
dat2 <- data.frame(y=factor(c(1,1,2,2),levels=c(1,2),labels=c("GRP1","GRP2")),
x=c(1,2,3,4),
n=c(1,2,1,1),
grp=c("GRP1","GRP1","GRP2","GRP2"))
plot_ly(dat2) %>%
add_markers(x = ~x,
y = ~y, color = ~grp,
marker = list(size=~I(n*10)),
opacity = .7) %>%
layout(showlegend=F)
【讨论】:
以上是关于使用数据列设置标记像素大小的主要内容,如果未能解决你的问题,请参考以下文章
Qt与Qtablewidget中headeritem的Python大小