【问题标题】:Plotly: how to create a filled area with a color gradient?Plotly:如何使用颜色渐变创建填充区域?
【发布时间】:2020-01-14 17:40:24
【问题描述】:

我想在 R 中创建一个实心平方,如下所示:

library(plotly)

p <- plot_ly() %>%
  add_trace(
    x = c(0, 1, 1, 0),
    y = c(0, 0, 1, 1),
    type = 'scatter',
    fill = 'toself',
    fillcolor = '#ab63fa',
    hoveron = 'points+fills',
    marker = list(
      color = '#ab63fa'
    ),
    line = list(
      color = '#ab63fa'
    ),
    text = "Points + Fills",
    hoverinfo = 'text'
  ) 
p

但那是带有彩虹渐变的颜色,就像this webpage 的网格图中的立方体一样。我该怎么办?

【问题讨论】:

    标签: r plotly r-plotly


    【解决方案1】:

    一开始我可能误解了您,并创建了一个 plot_ly - 情节,我如何理解您的问题 - 请参阅水平线下方的文本和示例。

    但后来我怀疑,如果那是你要找的。不幸的是,对于您可能要求的内容,我没有 plot_ly 方面的答案,但可以提供 ggplotly 风格的内容。

    在定义了n的区域数量后,创建了一个新的数据框,它构建了两列,其中x列分为n部分,y列重复y值(1) n 次。

    然后ggplot 是用geom_area 组成的。颜色通过scale_color_gradientn 进入。此方法在 x 轴上的每个位置用不同的颜色绘制 n 个区域。因此,通过更改n,您可以更改这些区域的数量。只需减少n,您将看到单个区域为条形。

    我认为这说明了一个简单的案例可以做什么。

    library(ggplot2)
    library(plotly)
    #> 
    #> Attache Paket: 'plotly'
    #> The following object is masked from 'package:ggplot2':
    #> 
    #>     last_plot
    #> The following object is masked from 'package:stats':
    #> 
    #>     filter
    #> The following object is masked from 'package:graphics':
    #> 
    #>     layout
    # define number of segments
    n = 400 
    
    df <- data.frame(x = seq(0, 1, by = 1/n), y = rep(1, n+1))
    
    p <- ggplot(df, aes(x=x, y=y)) #+ geom_point()
    pp <- p + geom_area(aes(group =x, color =x)) +
      theme_minimal() + #coord_flip() +
      scale_color_gradientn(colours = rainbow(10, s = 1, v = 1, start = 0, end = max(1, 10 - 1)/10, alpha = 1)) 
    ggplotly(pp)
    

    reprex package (v0.3.0) 于 2020-01-29 创建


    第一个解决方案

    在下面的代码中,我首先构建了一个数据框,然后使用transform 并键入groupby 在样式列表中为df$y 中的两个值定义两种颜色。 如果我查看您指向的网页,我会看到蓝色,没有渐变。所以我假设你想要代码#ab63fa 的颜色。我为四个点使用了两种颜色 - 分为两组 - black#ab63fa

    df <- data.frame(x = c(0, 1, 1, 0),
           y = c(0, 0, 1, 1))
    
    plot_ly(
      type = 'scatter',
      x = df$x,
      y = df$y,
      mode = 'markers',
      transforms = list(
        list(
          type = 'groupby',
          groups = df$y,
          styles = list(
            list(target = 0, value = list(marker =list(color = '#ab63fa'))),
            list(target = 1, value = list(marker =list(color = 'black')))
          )
        )
      )
    )
    

    此代码基于来自plotly的示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多