2016-08-05 22 views
1

如果gfactor變量,我可以得到以下工作,但我希望不斷處理顏色。當我運行以下時,顏色被忽略 - 線段都是藍色的。如何將R用於不同的線段使用不同的顏色

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解決方案:

g <- ggplot(data) + geom_segment(aes(x=x, xend=x2, y=y, yend=y2, color=z) 
ggplotly(g) 

回答

1

雖然plotly似乎有映射顏色來標記了相當多的支持,它似乎對線條很少,所以你必須提供。以下設置調色板和g值之間的映射,然後使用線條顏色和與調色板映射對應的顏色條創建一個繪圖對象。

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))) 

這給圖表

enter image description here

我的印象是plotly是一個較低的水平繪圖包,並且對於更復雜的圖表,它可能更直接地開發圖表中ggplot和然後轉換爲plotly對象,而不是直接進行繪圖。比較你的ggplot解決方案與上面給出的本地策略方法就是一個例子。

相關問題