【问题标题】:Is there an R dot type or coloring aesthetic to have the same dot with two different colors?是否存在 R 点类型或着色美学以具有两种不同颜色的相同点?
【发布时间】:2022-10-19 19:26:57
【问题描述】:

如果有一个分类变量可以理解为序数并且要用不同的颜色绘制,我有时会与图表斗争。 通常,只使用不同的颜色(v.gr.红色,蓝色,绿色......),但我想使用例如白色,半白半灰,灰色,半灰半黑,黑色,其中变量的顺序会更明显。

我发现这个环形交叉路口可以创建半圆,这可以用来创建两种颜色的点 (how to draw two half circles in ggplot in r ),但我想知道 R 中是否有 pch 类型或类似的类型来完成这项工作。

想象一下,我想绘制这些数据,并与具有顺序(按字母顺序)的分类变量分组:

#library(ggplot2)

mydata1 <- data.frame("var1" = sample(c(1:12), 12),
                  "var2" = sample(c(1:12), 12),
                  "group" = letters[1:3]) # three groups

我可以使用灰度,所以它的顺序很明显,这很好用:

ggplot(data = mydata1, aes(var1, var2, color = group)) + 
geom_point() + 
scale_color_grey(start = 0, end = 1)

如果我有 4 个而不是 3 个组,它仍然可以工作,因为可以区分浅灰色和深灰色:

mydata2 <- data.frame("var1" = sample(c(1:12), 12),
                      "var2" = sample(c(1:12), 12),
                      "group" = letters[1:4]) # four groups
ggplot(data = mydata2, aes(var1, var2, color = group)) + geom_point() + 
  scale_color_grey(start = 0, end = 1)

但如果我有 5 个或更多组,它就会停止工作:

mydata3 <- data.frame("var1" = sample(c(1:10), 10),
           "var2" = sample(c(1:10), 10),
           "group" = letters[1:5]) # five groups
ggplot(data = mydata3, aes(var1, var2, color = group)) + geom_point() + 
  scale_color_grey(start = 0, end = 1)

通常使用颜色,但有序性不明显。 如果存在将点颜色减半的美学,它将允许扩展灰度的使用。

【问题讨论】:

标签: r


【解决方案1】:

这个答案使用了两组 unicode 几何形状,双曝光。

使用来自@lukeA 的getPch() 功能:https://stackoverflow.com/a/22226643/10276092

并创建一个反向getPchRev()

install.packages("extrafont")
library(extrafont)
loadfonts()
getPch <- function(x) {
  sapply(x, function(x) {
    switch(as.character(x), 
           "0"=-9675,
           "25"=-9684,
           "50"=-9682,
           "75"=-9685,
           "100"=-9679
    )})
}

getPchRev <- function(x) {
  sapply(x, function(x) {
    switch(as.character(x), 
           "100"=-9675,
           "75"=-9684,
           "50"=-9683, ##reverse 50%
           "25"=-9685,
           "0"=-9679
    )})
}

df<-data.frame(x=1:10,
               y=1:10,
               value=50,
               a=1:10,
               b=10:1)

library(tidyverse)
df %>% 
  ggplot(aes(x=x, y=y)) +
  geom_point(aes(color=a), shape=getPch(df$value), size=5) +   
  geom_point(aes(color=b), shape=getPchRev(df$value), size=5) + 
  scale_color_viridis_c()

【讨论】:

    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多