【问题标题】:Converting string to RGB, then plot it将字符串转换为 RGB,然后绘制它
【发布时间】:2015-01-15 21:07:52
【问题描述】:

我在解决 R 中的作业时遇到了麻烦。

基本上,我得到一个字符串,这里是生日日期,并且应该以某种方式将其转换为数字值作为rgb 函数的输入。在我太神秘之前,请阅读作业说明:

给定一个带有生日的字符串,如下所示,创建一个显示该人生日颜色的图。

生日颜色是通过使用日期、月份和年份作为 rgb() 函数的索引来定义的。月份中的日期表示颜色中我们想要多少红色,月份表示绿色,年份表示蓝色。您可以假设所有月份都有 31 天。关于年份,假设要使用生日颜色功能的每个人都出生在 1915 年或之后。下面你可以看到我的生日颜色是蓝绿色,我儿子的生日颜色是蓝绿色。

提示:第一步应该是将字符串拆分为单独的元素,并确保随后将这些元素转换为数值。

birthday <- "02-10-1972"

calcBirthdayColor <- function(bd) {
## your code here
}

plot(0,type="n",
 axes=FALSE,ylab="",xlab="",
 xlim=c(-10,10),ylim=c(-10,10),asp=1)
## My birthday color:
rect(-10,-6,10,6,col=calcBirthdayColor(birthday))
## And the color of my son:
rect(-6,-10,6,10,col=calcBirthdayColor("10-09-2013"))

另外还有以下问题:

http://i.imgur.com/wrkfhMQ.png

我最初的猜测是,在转换为数字之后,可以将像“01-10-1972”这样的出生日期字符串插入rgb,但这并不真正起作用,因为maxColorValue 是错误的,例如RGB(1,10,1972)

即使我将其更改为大于 1972 年(例如 1、10、1972、2015 年),我也无法获得给定矩形的近似颜色。

如何使出生日期格式适合rgb 函数?

感谢您的任何提示。

【问题讨论】:

  • 你自己尝试过什么功课
  • 提到 1915 年是不是给了你一些线索?
  • 亲爱的 Floo0,在我编写任何将我转换为字符串的代码之前,我尝试了 rgb 函数以及如何将日、月和年充分输入,但谷歌搜索和帮助功能没有帮帮我……对不起。亲爱的 Mark Ransom, 没错,这就是我的观点。它没有给我任何线索!我想这显然不是任意数字,但不是。小提示?
  • 好吧,除了它建议我应该有某种 100 步或参考,因为距现在正好 100 年。

标签: r plot srgb


【解决方案1】:

为了好玩:

calcBirthdayColor <- function(birthday) {
do.call(rgb, as.list(setNames(
            (as.numeric(strsplit(birthday, "-")[[1]]) / c(31, 12, 1) - 
                         c(0, 0, 1915) ) / 
             c(1, 1, 2015-1915),
             c("red", "green", "blue"))))}
plot(0, type="n",
     axes=FALSE,ylab="",xlab="",
     xlim=c(-10,10),ylim=c(-10,10),asp=1)
## My birthday color:
rect(-10,-6,10,6,col=calcBirthdayColor(birthday))
## And the color of my son:
rect(-6,-10,6,10,col=calcBirthdayColor("10-09-2013"))
# red
rect(-3,-3,3,3,col=calcBirthdayColor("31-01-1915"))

【讨论】:

  • 我个人认为1-1-1915应该扩展到0, 0, 0#000000。要操作,鲜红色应该是 1915 年 12 月 1 日。
【解决方案2】:

非常感谢!现在,我明白了……不过确实花了我一段时间……我是新手。

同样,我今天在 Uni 的另一堂 R 课上编写了一个解决方案。看起来没有上面的那么优雅,但效果一样好。

感谢您的帮助!

birthday <- "02-10-1972"

calcBirthdayColor <- function(birthday) {

  bd.colour <- rgb(as.numeric(strsplit(birthday, "-")[[1]])[1]/31,
  as.numeric(strsplit(birthday, "-")[[1]])[2]/12,
  ((as.numeric(strsplit(birthday, "-")[[1]])[3])-1915) /100)

plot(0,type="n",
 axes=FALSE,ylab="",xlab="",
 xlim=c(-10,10),ylim=c(-10,10),asp=1)

rect(-10,-6,10,6, col=bd.colour)


}

calcBirthdayColor(birthday)

【讨论】:

  • 恭喜。 Tbh,我认为它和我的一样优雅。 ;-) R 有一个陡峭的学习曲线,但是一旦你迈出了第一步,就会很有趣。
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 2016-12-11
  • 2020-08-31
  • 2019-10-16
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 2012-01-08
相关资源
最近更新 更多