dan*_*dan 3 gradient r scatter-plot plotly
我有XY我想使用曲线图的数据scatter plot,用R的plotly包.
set.seed(1)
df <- data.frame(x=c(rnorm(30,1,1),rnorm(30,5,1),rnorm(30,9,1)),
y=c(rnorm(30,1,1),rnorm(30,5,1),rnorm(30,9,1)),
group=c(rep("A",30),rep("B",30),rep("C",30)),score=runif(90,0,1))
Run Code Online (Sandbox Code Playgroud)
每个点都分配给三个组中的一个(df$group)并且在该[0,1]范围内具有分数.
我正在寻找一种方法来绘制数据图形,使每组用不同颜色着色,但颜色(或强度)的阴影反映了分数.
所以我认为这会奏效:
library(dplyr)
library(plotly)
plot_ly(marker=list(size=10),type='scatter',mode="markers",x=~df$x,y=~df$y,color=~df$score,colors=c("#66C2A5","#FC8D62","#8DA0CB")) %>%
layout(xaxis=list(title="X",zeroline=F,showticklabels=F),yaxis=list(title="Y",zeroline=F,showticklabels=F))
Run Code Online (Sandbox Code Playgroud)
如果我只是通过group以下颜色代码:
plot_ly(marker=list(size=10),type='scatter',mode="markers",x=~df$x,y=~df$y,color=~df$group,colors=c("#66C2A5","#FC8D62","#8DA0CB")) %>%
layout(xaxis=list(title="X",zeroline=F,showticklabels=F),yaxis=list(title="Y",zeroline=F,showticklabels=F))
Run Code Online (Sandbox Code Playgroud)
所以看起来它正在混合group颜色和score渐变.
我正在寻找的是有绿色的色调(比如从有色左下方组gray到darkgreen)对应于score(从低到高),与同为分别在橙色和蓝色,其他两组.
使用scales::colour_ramp您可以使用快速功能自行创建颜色.我不确定如何在每个组内发生不同的渐变.注意我在df$score = df$x + df$y这里用来使映射更明显.
make_colour_gradient = function(x, brewer_palette = "Greens") {
min_x = min(x)
max_x = max(x)
range_x = max_x - min_x
x_scaled = (x - min_x) / range_x
# Chopping out first colour as it's too light to work well as a
# point colour
colours = scales::brewer_pal("seq", brewer_palette)(5)[2:5]
colour_vals = scales::colour_ramp(colours)(x_scaled)
colour_vals
}
df$score = df$x + df$y
df = df %>%
# Assign a different gradient to each group, these are the names
# of different palettes in scales::brewer_pal
mutate(group_colour = case_when(
group == "A" ~ "Greens",
group == "B" ~ "Oranges",
group == "C" ~ "Purples"
)) %>%
group_by(group) %>%
mutate(point_colour = make_colour_gradient(score, first(group_colour)))
plot_ly(marker=list(size=10),type='scatter',mode="markers",
x=~df$x,y=~df$y,color=~ I(df$point_colour)) %>%
hide_colorbar() %>%
layout(xaxis=list(title="X",zeroline=F,showticklabels=F),
yaxis=list(title="Y",zeroline=F,showticklabels=F))
Run Code Online (Sandbox Code Playgroud)
结果:
这确实会显示错误消息,但它们似乎并不重要?添加图例可能会很棘手.
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |