如何将 direct.label() 与简单(两个变量)ggplot2 图表一起使用
How to use direct.label() with simple (two variables) ggplot2 chart
这是两个变量的简单 ggplot 图表:
library("ggplot2")
library("directlabels")
library("tibble")
df <- tibble(
number = 1:10,
var1 = runif(10)*10,
var2 = runif(10)*10
)
ggplot(df, aes(number))+
geom_line(aes(y=var1), color='red')+
geom_line(aes(y=var2), color='blue')
是否可以使用如下表达式标记 var1 和 var2 的最后一个值:
direct.label(df, 'last.points')
在我的例子中,我得到一个错误:
Error in UseMethod("direct.label") :
no applicable method for 'direct.label' applied to an object of
class
Maria,您最初需要通过 "stacking data" 构建您的数据框。我喜欢使用 reshape2
包的 melt
函数。这将允许您只使用一个 geom_line
.
稍后您需要从 ggplot2
生成一个对象。这个对象你必须应用 directlabels
包。
library(ggplot2)
library(directlabels)
library(tibble)
library(dplyr)
library(reshape2)
set.seed(1)
df <- tibble::tibble(number = 1:10,
var1 = runif(10)*10,
var2 = runif(10)*10)
df <- df %>%
reshape2::melt(id.vars = "number")
p <- ggplot2::ggplot(df) +
geom_line(aes(x = number, y = value, col = variable), show.legend = F) +
scale_color_manual(values = c("red", "blue"))
p
directlabels::direct.label(p, 'last.points')
这是两个变量的简单 ggplot 图表:
library("ggplot2")
library("directlabels")
library("tibble")
df <- tibble(
number = 1:10,
var1 = runif(10)*10,
var2 = runif(10)*10
)
ggplot(df, aes(number))+
geom_line(aes(y=var1), color='red')+
geom_line(aes(y=var2), color='blue')
是否可以使用如下表达式标记 var1 和 var2 的最后一个值:
direct.label(df, 'last.points')
在我的例子中,我得到一个错误:
Error in UseMethod("direct.label") :
no applicable method for 'direct.label' applied to an object of
class
Maria,您最初需要通过 "stacking data" 构建您的数据框。我喜欢使用 reshape2
包的 melt
函数。这将允许您只使用一个 geom_line
.
稍后您需要从 ggplot2
生成一个对象。这个对象你必须应用 directlabels
包。
library(ggplot2)
library(directlabels)
library(tibble)
library(dplyr)
library(reshape2)
set.seed(1)
df <- tibble::tibble(number = 1:10,
var1 = runif(10)*10,
var2 = runif(10)*10)
df <- df %>%
reshape2::melt(id.vars = "number")
p <- ggplot2::ggplot(df) +
geom_line(aes(x = number, y = value, col = variable), show.legend = F) +
scale_color_manual(values = c("red", "blue"))
p
directlabels::direct.label(p, 'last.points')