三色渐变散点图

问题描述 投票:0回答:1

我想用对应于 3 个类别的 3 种颜色为散点图着色,但使用基于类别的三种颜色混合的渐变。数据是二维的(x1 和 x2),每个点以一定的概率属于三个类别之一。下面的数据框包含点 (x1, x2)、类别 (cat)、属于该类别的概率(成员资格)以及三个类别中每个类别的概率 (prob1,prob2,prob3)。隶属概率是我为了轻松对数据进行分类而分离出的三个概率中最高的。

https://raw.githubusercontent.com/gunsnfloyd/algorithmdata/main/fuzzy.tsv

我可以给这三个点上色,没问题。这有效。

ggplot(data = fuzzy.df, aes(x = x1, y = x2, color = as.factor(cat)))+
  geom_point()+
  scale_color_manual(values = c("green", "blue", "red"))

我尝试使用成员资格作为颜色的定义变量,但它不会按类别进行区分。 ggplot(数据 = fuzzy.df, aes(x = x1, y = x2, 颜色 = 隶属度))+ 几何点()+ scale_color_gradientn(颜色=彩虹(3))

我希望能够根据颜色的概率使颜色褪色,但按类别进行区分。如何在 ggplot 中结合这些概念?

r ggplot2 gradient
1个回答
0
投票

我想这会让你更亲近。这是从这里改编的。

library(ggplot2)
library(ggnewscale)

ggplot(mapping = aes(x = x1, y = x2)) +
  geom_point(data = d1, aes(group = cat, colour = membership)) +
  scale_color_gradientn(colors = c('red', 'red4'), 
                        name = "hp = 1") +
  new_scale_color() +
  geom_point(data = d2, aes(group = cat, colour = membership)) +
  scale_color_gradientn(colors = c('lightblue', 'darkblue'), 
                        name = "hp = 2") +
  new_scale_color() +
  geom_point(data = d3, aes(group = cat, colour = membership)) +
  scale_color_gradientn(colors = c('lightgreen','darkgreen'), 
                        name = "hp = 3") 

给予

数据:

set.seed(1)
fuzzy.df <- data.frame(
  x1 = c(rnorm(50, 2.5, .7), rnorm(50, -3, 2), rnorm(50, -5, 1.5)), 
  x2 = c(rnorm(50, 0, .7), rnorm(50, -4, 1.5), rnorm(50, -5, 1.5)), 
  membership = rnorm(150, .6, .2),
  cat = as.factor(rep(x =1:3, each = 50)))

# split(x = data, f = data$cat)
d1 <- fuzzy.df[fuzzy.df$cat == "1", ]
d2 <- fuzzy.df[fuzzy.df$cat == "2", ]
d3 <- fuzzy.df[fuzzy.df$cat == "3", ]
© www.soinside.com 2019 - 2024. All rights reserved.