gpt4 book ai didi

r - 如何在R中绘制仪表图?

转载 作者:行者123 更新时间:2023-12-03 22:50:29 25 4
gpt4 key购买 nike

如何在 R 中绘制以下图?

  Red = 30
Yellow = 40
Green = 30

Needle at 52.

请帮助我,因为我非常需要。

谢谢

enter image description here

最佳答案

所以这是一个完整的 ggplot解决方案。

注意:从原始帖子中编辑以在仪表中断处添加数字指示器和标签,这似乎是 OP 在他们的评论中要求的。如果不需要指示器,删除 annotate(...)线。如果不需要标签,删除 geom_text(...)线。

gg.gauge <- function(pos,breaks=c(0,30,70,100)) {
require(ggplot2)
get.poly <- function(a,b,r1=0.5,r2=1.0) {
th.start <- pi*(1-a/100)
th.end <- pi*(1-b/100)
th <- seq(th.start,th.end,length=100)
x <- c(r1*cos(th),rev(r2*cos(th)))
y <- c(r1*sin(th),rev(r2*sin(th)))
return(data.frame(x,y))
}
ggplot()+
geom_polygon(data=get.poly(breaks[1],breaks[2]),aes(x,y),fill="red")+
geom_polygon(data=get.poly(breaks[2],breaks[3]),aes(x,y),fill="gold")+
geom_polygon(data=get.poly(breaks[3],breaks[4]),aes(x,y),fill="forestgreen")+
geom_polygon(data=get.poly(pos-1,pos+1,0.2),aes(x,y))+
geom_text(data=as.data.frame(breaks), size=5, fontface="bold", vjust=0,
aes(x=1.1*cos(pi*(1-breaks/100)),y=1.1*sin(pi*(1-breaks/100)),label=paste0(breaks,"%")))+
annotate("text",x=0,y=0,label=pos,vjust=0,size=8,fontface="bold")+
coord_fixed()+
theme_bw()+
theme(axis.text=element_blank(),
axis.title=element_blank(),
axis.ticks=element_blank(),
panel.grid=element_blank(),
panel.border=element_blank())
}
gg.gauge(52,breaks=c(0,35,70,100))


## multiple guages
library(gridExtra)
grid.newpage()
grid.draw(arrangeGrob(gg.gauge(10),gg.gauge(20),
gg.gauge(52),gg.gauge(90),ncol=2))



您可能需要调整 size=... geom_text(...) 的参数和 annotate(...)取决于您的仪表的实际尺寸。

IMO 段标签是一个非常糟糕的主意:它们使图像困惑并破坏了图形的目的(一目了然地指示指标是否处于“安全”、“警告”或“危险”区域)。

关于r - 如何在R中绘制仪表图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24900903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com