我多年来一直使用带有ggplot2的Tufte线,但我总是想知道是否有自动绘制方法,因此它们对应于轴抽搐。
我绘制它们的通常方法是这样的:
ggplot(mtcars, aes(x=mpg, y=cyl))+
geom_bar(stat = "identity")+
theme_tufte()+
geom_hline(yintercept = c(5,10,15), col="white", lwd=3)
这里我用yintercept = c(5,10,15)指定刻度,但最近我正在构建一个改变轴的Shiny应用程序,所以我不能指定固定的刻度。
有没有办法让我说出像yintercept = tickmarks这样的东西,这样我的Shiny应用程序将始终无需预先计算并手动定义轴和Tufte线?
答案 0 :(得分:6)
您可以使用ggplot_build
将刻度线位置提取为矢量,然后将其传递给yintercept
的{{1}}参数:
geom_hline
答案 1 :(得分:5)
这是一个计算中断位置然后将它们应用于Builtin.RawPointer
和scale_y_continuous
的函数:
geom_hline
现在测试一下这个功能:
library(ggthemes)
library(scales)
library(lazyeval)
library(tidyverse)
fnc = function(data, x, y, nbreaks=5, lwd=3, breaks=NULL) {
if(is.null(breaks)) {
breaks = data %>% group_by_(x) %>%
summarise_(yvar=interp(~ sum(yy), yy=as.name(y)))
breaks = pretty_breaks(n=nbreaks)(c(0, breaks$yvar))
}
ggplot(data, aes_string(x, y)) +
geom_bar(stat = "identity") +
theme_tufte() +
scale_y_continuous(breaks=breaks) +
geom_hline(yintercept = breaks, col="white", lwd=lwd)
}