首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制R,以便对不同的线段使用不同的颜色

如何绘制R,以便对不同的线段使用不同的颜色
EN

Stack Overflow用户
提问于 2016-08-06 06:51:35
回答 1查看 1.6K关注 0票数 1

如果g是一个factor变量,但我希望连续处理颜色,则可以执行以下操作。当我运行下面的代码时,颜色被忽略了-线段都是蓝色的。

代码语言:javascript
复制
require(plotly)
x <- rep(c(1, 1, NA,  2, 2, NA, 3, 3, NA), 2)
y <- c(1, 2, NA, 2, 3, NA, 3, 4, NA, 11, 12, NA, 12, 13, NA, 13, 14, NA)
g <- c(rep(1, 9), rep(2, 9))
plot_ly(x=x, y=y, type='lines', color=g)

有一个使用ggplot2plotly::ggplotly的解决方案,但我更愿意找一个全plotly的解决方案:

代码语言:javascript
复制
g <- ggplot(data) + geom_segment(aes(x=x, xend=x2, y=y, yend=y2, color=z)
ggplotly(g)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-08 05:26:33

虽然plotly似乎有相当多的支持将颜色映射到标记,但它似乎对线条的支持很少,所以你必须提供它。下面的代码设置了调色板和g的值之间的映射,然后创建一个具有线条颜色的plotly对象和一个对应于到调色板的映射的颜色条。

代码语言:javascript
复制
  library(plotly)
  library(RColorBrewer)
  df <- data.frame(x=x, y=y, g=g)
# 
#  Seclect a color palette from the ColorBrewer palettes
   num_colors <- 8
   color_pal <- brewer.pal(num_colors, "RdYlBu")
#  Make a plotly colorscale for the palette  
   g_colorscale <- data.frame( seq(0,1, 1/(num_colors-1)), color_pal)
   colnames(g_colorscale) <- NULL
#  Set the min and max for mapping g values to colors    
   gmin <- min(df$g)-.5
   gmax <- max(df$g)+.5
#  Create an interpolation function for mapping g values to colors 
   color_rmp <- colorRamp(color_pal)
   g_color_map <- function(g, gmin,  gmax) {
                        g_3color <- as.vector(color_rmp((g - gmin)/(gmax-gmin)))/255 
                        rgb(g_3color[1],g_3color[2], g_3color[3]) 
   }
# Create plotly object with a colorbar    
  sp <- plot_ly(data=df, x=x, y=y, type="scatter", mode="markers", 
                 showlegend=FALSE, 
                 marker=list(colorscale=g_colorscale,
                             colorbar=list(title="g"),
                             cmin=gmin, cmax=gmax , size=1))
# Add a line for each g value
  for( g_line in unique(df$g)) {
    sp <- add_trace(sp, data=df[df$g==g_line,], x=x, y=y, 
                   type="scatter", mode="lines", inherit=FALSE, showlegend=FALSE,
                   name=g_line, evaluate=TRUE, 
                   line=list(width=5, dash="solid",
                             color=g_color_map(g_line, gmin=gmin, gmax=gmax)))
  }
# Add chart features  
  sp <- layout(sp, xaxis = list(range=c(.5,3.5)))

它给出了图表

我的印象是,plotly是一个较低级别的绘图包,对于更复杂的图表,在ggplot中开发图表,然后将其转换为plotly对象可能比直接在plotly中开发更简单。将您的ggplot解决方案与上面给出的原生绘制方法进行比较就是一个例子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38798756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档