iod*_*iod 7 r ggplot2 plotly ggplotly
我正在尝试将 ggplot 变成情节。ggplot 渲染得很好,但是当我通过 ggplotly 将其放入时,图例突然在标签后添加了括号和“,1”。
这是一个示例假数据:
sorted1<-data.frame(CommDate=c(as.Date("2017-09-12"), as.Date("2017-10-15")), CommName=c("Foo", "Bar"), PubB4=c(2,3))
Run Code Online (Sandbox Code Playgroud)
这是我试图在其上运行的代码:
ggplotly(ggplot(sorted1, aes(x=as.Date(CommDate), y=PubB4))+
geom_smooth(level=0.0, aes(colour="Moving average"), se=FALSE)+
geom_point(aes(fill=CommName), size=4)+
expand_limits(y=c(0,4.5))+
geom_line(mapping=aes(y=4),colour="orangered3",size=1)+
geom_text(mapping=aes(y=4.2, x=min(sorted1$CommDate)+4), label="Target", size=3)+
xlab("Committee Date")+
guides(fill=guide_legend(title="Committee Names"), colour=guide_legend(title.theme=element_blank(),title=NULL))+
scale_x_date(labels = date_format("%b-%y"))+
theme_light()+
theme(plot.title=element_text(hjust=0.5, size=12),panel.grid.major.x = (element_blank()),
panel.grid.minor.x = (element_blank()),
axis.title = element_text(size=8), legend.title = element_text(size=10),
legend.text = element_text(size=8), legend.box = 'vertical', legend.spacing.y = unit(-2,"mm"))+
scale_colour_manual(name="",values="#0072B2"))
Run Code Online (Sandbox Code Playgroud)
(geom_smooth此处不呈现,但会处理完整数据。)
这是我从中得到的:
为什么图例显示为“(foo,1)”?
我尝试删除geom_smooth实际上解决了问题的 ,但我需要它 - 我如何保留它但修复图例?
谢谢!
更新:好的,我开始注释掉一些东西,看看会发生什么。如果我aes()从 中删除geom_smooth,也可以解决问题,只要我保持scale_colour_manual注释掉。但我真的很想控制geom_smooth的美学,并将其包含在图例中。所以我正在取得进展,但还没有完全到位......
这是另一个优雅的解决方案。在引擎盖下,它检测是否有情节图例名称选项可用,如果可用,则删除“(”和“,1)”。
library(ggplot2)
library(plotly)
library(stringr)
library(dplyr)
data = data.frame(Date=as.Date(c("2017-09-12","2017-10-15")), PubB4=c(2,3), category=c("Foo", "Bar"))
myplot = ggplotly(ggplot(data, aes(x=Date, y=PubB4))+
geom_hline(aes(yintercept=2.5, color="my line label"))+
geom_point(aes(fill=category), size=4))
for (i in 1:length(myplot$x$data)){
if (!is.null(myplot$x$data[[i]]$name)){
myplot$x$data[[i]]$name = gsub("\\(","",str_split(myplot$x$data[[i]]$name,",")[[1]][1])
}
}
myplot
Run Code Online (Sandbox Code Playgroud)