在R中用渐变比例填充多边形

2024-03-26

我想创建一个仪表来可视化一个变量对另一个变量是否有或多或少的影响。

我构建了一个函数来绘制仪表,并用 3 种不同的颜色填充它。

gg.gauge <- function(pos,breaks=c(0,33,66,100),determinent) {

  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 = "green")+
    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=0.8*cos(pi*(1-    breaks/100)),y=-0.1),label=c('Less','','',"More"))+
        annotate("text",x=0,y=0,label=determinent,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(),
          legend.position = "none") 
}

Output:

我想用渐变颜色填充,这样它就能产生从红色(低)到绿色(高)的褪色效果,而不会产生非常明显的剪切。

我尝试使用scale_fill_grdientn没有积极的结果。

Thanks


实现此目的的最简单方法是使用单独的线段而不是多边形。以下面的修改示例为例,我只更改了定义get_poly并使用geom_segment代替geom_polygon:

gg.gauge <- function(pos, breaks = c(0, 33, 66, 100), determinent) {
  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 = 1000)
    x        <- r1 * cos(th)
    xend     <- r2 * cos(th)
    y        <- r1 * sin(th)
    yend     <- r2 * sin(th)
    data.frame(x, y, xend, yend)
  }

  ggplot() + 
    geom_segment(data = get.poly(breaks[1],breaks[4]), 
                 aes(x = x, y = y, xend = xend, yend = yend, color = xend)) +
    scale_color_gradientn(colors = c("red", "gold", "green")) +
    geom_segment(data = get.poly(pos - 1, pos + 1, 0.2), aes(x = x, y  =y, xend = xend, yend = yend)) +
    geom_text(data=as.data.frame(breaks), size = 5, fontface = "bold", vjust = 0,
              aes(x = 0.8 * cos(pi * (1 - breaks / 100)),  y = -0.1), label = c('Less', '', '', "More")) +
    annotate("text", x  = 0, y = 0,label=determinent,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(),
          legend.position = "none")
}
gg.gauge(pos = 10, determinent = "Test")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在R中用渐变比例填充多边形 的相关文章

随机推荐

  • NodeJS UDP 多播如何

    我正在尝试将 UDP 多播数据包发送到 230 185 192 108 以便每个订阅的人都会收到 有点卡住了 我相信它的广播正确 但似乎无法从任何客户端获取任何信息 Server var news Borussia Dortmund win
  • 如何将多个参数传递给 Scrapy 蜘蛛(不再支持使用多个蜘蛛运行“scrapy scrapy”时出现错误)?

    我想将多个用户定义的参数传递给我的 scrapy spider 所以我尝试遵循这篇文章 如何在 scrapy 蜘蛛中传递用户定义的参数 https stackoverflow com questions 15611605 how to pa
  • CMTime 和 AVFoundation 中单帧的移动

    我正在尝试使用 AVFoundation 播放视频 我使用以下代码作为将播放前进一帧的按钮 它间歇性地工作 在某些执行中它会做正确的事情并前进一帧 但大多数时候我必须按按钮 3 或 4 次才能前进一帧 这让我认为这是某种精度问题 但我无法弄
  • 为什么单函数访问器似乎被认为是坏习惯?

    我经常看到 即在 Slim 框架内 单一函数访问器风格 如下面的 1 已弃用 取而代之的是经典的 Java ish 2 函数访问器 get set 如下面的 2 就我个人而言 我更喜欢更少的代码行 在 1 中 和更少的输入 get set
  • Java多线程数据库访问[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于多线程 Java 应用程序来说 确保所有线程同步访问数据库的最佳解决方案是什么 例如 每个线程代表单独的事务 并且首先检查数据库的
  • 使用 FFT 进行 Matlab 模板匹配

    我正在努力解决 Matlab 中傅立叶域中的模板匹配问题 这是我的图片 艺术家是 DeviantArt 上的 RamalamaCreatures 我的目标是在负鼠的耳朵周围放置一个边界框 就像这个例子 我使用normxcorr2执行模板匹配
  • Stripe webhook 签名失败 - Stripe.net

    我正在尝试使用 Jayme Davis 的 C 库 Stripe net 来实现 stripe webhook 我已经在条带仪表板中设置了测试端点并生成了秘密 端点命中良好 并将使用 StripeEventUtility ParseEven
  • Django Celery 内存未释放

    在我的 django 项目中 我有以下依赖项 Django 1 5 4 django celery 3 1 9 amqp 1 4 3 海带 3 0 14 librabbitmq 1 0 3 按照建议https stackoverflow c
  • MongoDB:文档大小会影响查询性能吗?

    假设一款手机游戏由 MongoDB 数据库支持 其中包含User包含数百万份文档的集合 现在假设必须与用户关联的几十个属性 例如一个数组 id的值Friend文件 他们的用户名 照片 一系列 id的值Game文件 上次登录日期 游戏货币数量
  • C++ 传递字符串文字而不是 const std::string&?

    我有以下代码 使用 g 进行编译时没有警告 Wall pedantic include
  • Kotlin 中带有 val 的循环引用

    在 Kotlin 中 假设我有data class A val f B and data class B val f A 我想初始化本地var a A and var b B这样a f is b and b f is a A f and B
  • CUDA __syncthreads() 编译正常,但带有红色下划线

    我已经使用 CUDA 4 2 一周了 但遇到了一些问题 当我编写 syncthreads 函数时 它会带有下划线 看起来是错误的 然后 如果我将鼠标放在该函数上 则会出现一条消息 标识符 syncthreads 未定义 但是当我编译我的项目
  • VB6 解析器/词法分析器/脚本编写器

    我有一个 VB6 游戏 它运行得很好 但我一直在考虑创建一个脚本引擎的想法 我想我希望 VB6 为我读取纯文本脚本文件 然后 lex parse execute 它们 我有很好的编程经验 之前也搭建过一个简单的C编译器 以及一个LOGO模拟
  • Android ExpandableListView 和 onChildClick 不起作用

    我已经阅读了很多与我遇到相同问题的线程 但我无法弄清楚发生了什么 我有一个可扩展的列表视图 但我无法使 onChildClickListener 工作 onGroupClickListener 工作正常 但我并不真正需要它 我看了很多例子
  • 在 Cocoa 中创建动画 GIF - 定义帧类型

    我已经能够改编在 SO 上找到的一些代码 从我的视图的 屏幕截图 生成动画 GIF 但结果是不可预测的 GIF 帧有时是完整图像 完整帧 替换 模式 正如 GIMP 所标记的那样 其他时候只是与上一层的 差异 组合 模式 据我所知 当涉及的
  • 如何自动初始化 Perl 中的所有标量变量?

    Perl 自动初始化变量 https stackoverflow com questions 260703 when does perl auto initialize variables to undef默认情况下 有没有办法覆盖这个默认
  • 获取特定 S3 对象的下载计数

    我有许多 S3 对象可供我的客户使用 由于我想按使用情况向客户计费 我想知道是否有任何聪明的方法来获取给定文件的下载次数 或者 我想我可以解析 S3 提供的日志文件 但对于每个客户 1000 万次以上的提取 这可能是一项艰巨的任务 有任何想
  • $rootscope 值在控制器中未定义

    我在运行中定义了一个 rootscope 对象 如下所示 Start the AngularJS App var angularApp angular module angularApp Run at the start of the An
  • C# 9 中的 Init-Only 和 ReadOnly 有什么区别?

    我正在经历C 9 新特性 https devblogs microsoft com dotnet welcome to c 9 0 即将发布 仅初始化 https devblogs microsoft com dotnet welcome
  • 在R中用渐变比例填充多边形

    我想创建一个仪表来可视化一个变量对另一个变量是否有或多或少的影响 我构建了一个函数来绘制仪表 并用 3 种不同的颜色填充它 gg gauge lt function pos breaks c 0 33 66 100 determinent