【问题标题】:"Split" up by category in plotly在情节中按类别“拆分”
【发布时间】:2019-09-06 15:35:38
【问题描述】:

我正在尝试绘制我的散点图,每个散点都有按类别指定的颜色。

在我开始使用“split”(这行代码显示图例)之前它工作正常,并且应该通过描述将类别变量“拆分”成不同的类别。

这是一个可重现的例子:

# Load data
df_soccer <- data.frame("x" = 1:4,
                        "y" = 2:5,
                        "Name" = c("Manchester United", "FC Barcelona", "FC Porto", "Borussia Dortmund"),
                        "soc_color" = c("rgb(218, 2, 14)","rgb(167, 0, 66)", "rgb(0, 147, 51)", "rgb(0, 0, 0)"))

# Use plot_ly to plot it
df_soccer %>%
  plot_ly() %>%
  add_trace(.,
        x = ~x,
        y = ~y,
        type = "scatter",
        hoverinfo = "text",
        text = paste(df_soccer$Name),
      #  split = df_soccer$Name,
        mode = "markers",
        marker = list(color =  ~soc_color, size = 20))

我所期望的是这个情节:

如您所见,颜色混合在一起。 Borussia Dortmund 应该是黑色的,ManU 应该是红色的。这就是我想要的,只是缺少传说:

有没有人有一些建议可以通过按类别划分颜色并以正确的颜色绘制它们来获得正确的颜色?

提前非常感谢!

【问题讨论】:

  • 这可能是因为df_soccer$Namedf_soccer$soc_color 是按字母顺序分配级别的因子...尝试str(df_soccer) 并检查级别...

标签: r plotly


【解决方案1】:

通过使用 Ben 的建议并将“名称”变量转换为正确顺序的因子,颜色和名称现在匹配。

library(plotly)

# Load data
df_soccer <- data.frame(x = 1:4,
                        y = 2:5,
                        Name = c("Manchester United", "FC Barcelona", "FC Porto", "Borussia Dortmund"),
                        soc_color = c("rgb(218, 2, 14)","rgb(167, 0, 66)", "rgb(0, 147, 51)", "rgb(0, 0, 0)"), stringsAsFactors = FALSE)

df_soccer$Name<-factor(df_soccer$Name, levels=c("Manchester United", "FC Barcelona", "FC Porto", "Borussia Dortmund"))

plot_ly(df_soccer, name=~Name) %>%
  add_trace(x = ~x,
            y = ~y,
            type = "scatter",
            mode= "markers", 
            marker=list(color=~soc_color, size = 20))

通过在表格中添加重复值来回答您的问题。对我来说,让它工作的最简单方法是使用 ggplot2 构建图表,然后将其转换为 Plotly 对象。

library(ggplot2)
df_soccer <- data.frame("x" = 1:4,
                        "y" = 2:5,
                        "Name" = c("Manchester United", "FC Barcelona", "FC Porto", "Borussia Dortmund"),
                        "soc_color" = c("red","dark red", "green", "black"))
df_soccer <-rbind(df_soccer[1:2,], df_soccer[1,], df_soccer[3:4,])
df_soccer$y[3]<-3.5

g<-ggplot(df_soccer, aes(x=x, y=y, color=soc_color, name=Name)) +
  geom_point( size=5) +
  scale_colour_identity(guide = "legend", labels=(df_soccer$Name), breaks=(df_soccer$soc_color))
ggplotly(g)

【讨论】:

  • 嘿@DaveT,谢谢你的回答。我遇到了另一个问题。如果我的 name 变量看起来像 Name &lt;- c("Manchester United", "FC Barcelona", "Manchester United")。我正在努力在列表中使用两倍相同的因素,而每个因素仍然应该以特定的颜色显示。希望这是有道理的。
猜你喜欢
  • 2020-01-06
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多