垂直 vistime 时间线和重叠的 geom_text 标签

问题描述

我正在尝试使用 vistime 及其 ggplot 绘图选项绘制垂直时间线。我的主要目的是更好地将它与文本并排整合。这是代码

library("vistime")
library("plotly")
data <- read.csv("../../data/programming.csv")
g <- gg_vistime(data,col.event="Item",col.start="Start.Date",col.end="End.Date",col.group="Group")
g + theme(axis.text.x = element_text(angle=90,color='blue4',size=14) )+coord_flip()

Image result

如您所见,在我执行 coord_flip 时,标签彼此相交。我想让标签垂直。这是绘制它们的代码

https://github.com/shosaco/vistime/blob/372da36791cbdb7ad7d6841ed991e55b36f77e06/R/plot_ggplot.R#L83-L91

所以这意味着它是一个 geom_text 句子。有没有什么方法可以改变 geom_text 绘制的文本的方向一旦完成?我可以使用一些 theme 命令来做到这一点吗?除此之外,有什么方法可以使用 vistime 更改标签的位置吗?

解决方法

您可以使用(令人惊讶的)ggplot2 来解构任何 ggplot_build 可视化(实际上,它的作用是创建可以使用普通 plot 呈现的元素)。

data <- read.csv("data/programming.csv")


g <- gg_vistime(data,col.event="Item",col.start="Start.Date",col.end="End.Date",col.group="Group") + theme(axis.text.x = element_text(angle=90,color='blue4',size=14) )+coord_flip()

g.d <- ggplot_build(g)

g.d$data[[4]]$angle <- 90

rebuilt <- ggplot_gtable(g.d)

png(filename="img/timeline.png",width=240,height=960)
plot(rebuilt)
dev.off()

这会创建一个具有不同绘图元素的数据框,包括 g.d$data,它实际上包含在其第 4 个元素中呈现时的数据及其属性。 g.d$data[[4]]$angle 包含已渲染的所有 geom_text 元素的角度。所以一旦你得到它,只需将它单独或集体更改为你想要的。您需要使用 ggplot_gtable 重建绘图,然后使用核心 plot 命令以任何您想要的方式绘制和渲染它,在本例中为 png

无论如何,ggplot_build 允许您内省数据结构和使用 ggplot 创建的图形的不同部分,更改其任何一个层、元数据或之后创建。在我们的例子中,它产生 the intended effect

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...