首页 文章

离散与连续情况下的映射与设置颜色

提问于
浏览
2

我是ggplot的新手 . 我试图了解如何使用ggplot . 我正在读Wickham的书,仍然试图围绕绘图与设置颜色 .

A) Discrete case 这是我做的:

library(dplyr)
library(ggplot2)
test<-filter(mpg,year==2008)
    test<-test[1:10,]
    grid <- data_frame(displ = seq(min(mpg$displ), max(mpg$displ), length = 50))
    mod <- loess(hwy ~ displ, data = mpg)
    grid$hwy <- predict(mod, newdata = grid)

a)使用离散值然后使用(aes(color =“xyz”))

ggplot(mpg,aes(displ,hwy)) +
  geom_point() +
  geom_text(data = test,aes(label=trans,color = "blue"))

这只是添加了一个带有“蓝色”标签的图例 . 为什么会这样?

b)在美学之外提供颜色=“蓝色” .

ggplot(mpg,aes(displ,hwy)) +
  geom_point() +
  geom_text(data = test,aes(label=trans),color = "blue")

这样可以将颜色更改为“蓝色” .

B) Continuous case

a)使用(aes(color =“xyz”))这是我做的:

ggplot(mpg,aes(displ,hwy)) +
  geom_point() +
  geom_line(data = grid, aes(colour = "green"),size=1.5)

与案例a)一样,对于离散情况,这会添加一条粉红色的线条,文字为“绿色”

b)提供美学之外的颜色 .

ggplot(mpg,aes(displ,hwy)) +
  geom_point() +
  geom_line(data = grid, colour = "green",size=1.5)

这里,线的颜色确实变为“绿色”,我丢失了标签 .

所以,我不理解aes的 Value (color =“xyz”) . 它所做的就是添加一个标签 . 不是吗?我们为什么要用它?

1 回答

  • 3

    数据 - 数据列或数据列的转换,进入 aes() . 当你执行 aes(color = 'blue') 时,就好像你的数据有一个未命名的列,每一行都有字符串 "blue" .

    ggplot(mpg,aes(displ,hwy)) +
      geom_point() +
      geom_text(data = test, aes(label = trans, color = "blue"))
    

    在这种情况下, "blue" 不是一种颜色 - 它只是一个字符串 . 如果使用 color = "green",color = "bleu"color = "look at this long long label" ,如果这些结果在 aes() 内,您将得到相同的结果(标签除外) .

    字符串 - 即使它只有一个值 - 将被强制转换为一个因子并被视为离散变量 .

    如果您不遵循一般规则,这可能会造成混淆: don't put constants inside aes() - only put mappings to actual data columns.

    你似乎对连续和离散色标感到困惑 . 当你谈到颜色时,你标记为"continuous case"的东西仍然是离散的 . 使用 geom_pointgeom_line ,平滑的geom或任何其他geom不会使颜色离散或连续 . 选择离散或连续色标唯一重要的是映射到颜色的数据类型( class ) . 如果是数字,则默认色标将是连续的 . 如果它不是数字,则默认色标将是离散的 .

相关问题