【问题标题】:Is there a way to have non-overlapping data point labels on a ternery plot in R?有没有办法在 R 的三元图上使用不重叠的数据点标签?
【发布时间】:2019-04-03 09:33:32
【问题描述】:

我正在尝试复制我在 FiveThirtyEight 在https://fivethirtyeight.com/features/how-cable-news-reacted-to-the-cohen-hearing/ 上找到的图表。这显示了一个三元图,其中 3 轴中单词的位置显示了相应网络引用的比例。

我目前正在使用 R、ggplot2,更重要的是 ggtern(我广泛用于三元图)。但是,我从来没有找到一种方法使点上的数据标签重叠。我一直希望 ggtern 能与 ggrepel 交互,但遗憾的是它没有(据我所知)。 有什么方法可以强制它们进行交互,或者找到其他方法吗?

为了清楚我所追求的,链接中显示的图表:

我的图表示例,其中单词重叠且看起来很糟糕:

编辑 创建我的可怕图表的代码:

    data <- data.frame(word = c("A","random","set","of","words","that","can","hopefully","help","someone","solve","my","issue","of","overlapping","labels","and","make","my","chart","readable","and","a","good","visualization"),
               axis1 = sample(1:100),
               axis2 = sample(1:100),
               axis3 = sample(1:100))

    ggtern(data = data,
        aes(x = axis1, y = axis2, z = axis3, colour = word, label = word)) +
      geom_point(size = 1) +
      geom_text()

【问题讨论】:

  • 你能显示你图表的代码/数据吗?

标签: r ggplot2 ggtern


【解决方案1】:

好的,所以你想要ggrepel 包中的功能。虽然 ggrepel 在这里不起作用,但您可以使用 position_nudge_terncheck_overlap

word = c("A","random","set","of","words","that","can","hopefully","help","someone","solve","my","issue","of","overlapping","labels","and","make","my","chart","readable","and","a","good","visualization")
col = c("red", "blue", "green", "red", "blue", "green","red", "blue", "green", "red", "blue", "green","red", "blue", "green", "red", "blue", "green","red", "blue", "green", "red", "blue", "green","red")

n  = 25   #Number of Data Points
nv = 0.1  #Vertical Adjustment
pn = position_nudge_tern(y=nv,x=-nv/2,z=-nv/2)

data <- data.frame(x = sample(1:25),
               y = sample(1:25),
               z = sample(1:25), 
               label=word)

ggtern(data = data, aes(x = x, y = y, z = z, colour = col, label = word)) +
  geom_point(size = 1) +
  theme_nomask() + #Allow Labels to Spool Over Edges
  geom_text(position=pn,aes(label=word),check_overlap=T, size=5)

哪个会给你不重叠的标签:

【讨论】:

  • 这不适用于 ggtern。我追求的是 ggrepel 之类的东西,但这在三元图上是正确的。
  • 是的。此外,在您的示例图中,他们通过更改文本的角度来调整位置(例如,它不是全水平的)
  • @Peter:现在可以了吗?
  • 很抱歉,一直想让 ggrepel 与 ggtern 合作。很多人都要求这样做。
  • @Nicholas Hamilton 你知道是否可以在我的示例图中调整角度(就像在@Peter 的有线电视新闻示例中一样)?
猜你喜欢
  • 2020-01-14
  • 2021-09-24
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
相关资源
最近更新 更多