r - 将十六进制字符串值硬编码为 ggplot 中的颜色

标签 r colors ggplot2 hex

我有一个数据框,其中“x”和“y”列作为数值,第三列“cluster”作为十六进制字符串,示例如下:

library(ggplot2)
library(scales)
colList = c(scales::hue_pal()(3),"#520090")
dat = data.frame(x=runif(100,0,1),y=runif(100,0,1),cluster=sample(1:4, 100, replace=T))
dat$cluster = factor(dat$cluster)
levels(dat$cluster) = c(colList)
head(dat)

我正在尝试创建一个散点图,其中“x”和“y”列映射到 x 和 y 轴,并且这些点根据存储在“簇”列中的十六进制值着色。我尝试过以下方法:

ggplot(dat,aes(x,y)) + 
  geom_point(aes(colour = cluster), alpha=0.5)

但是,这只是分配存储在 scales::hue_pal()(4) 中的默认前四个值,我已将最后一个值更改为深紫色,十六进制值 #520090。我还尝试更改默认的十六进制值,使其不再显示为图例中的文本。我尝试将“Cluster 1”、“Cluster 2”、...、“Cluster 4”硬编码为图例文本,但没有成功:

ggplot(dat,aes(x,y)) + 
  geom_point(aes(colour = cluster), alpha=0.5) + 
  theme(legend.text = element_text("Cluster 1", "Cluster 2", "Cluster 3", "Cluster 4"))

非常感谢任何建议!

最佳答案

为了根据簇标识为点着色,需要将簇名称(即十六进制值)映射到一组美学值。

由于您希望使用簇列中的十六进制值来表示实际颜色,因此您可以使用scale_color_manual 函数并将簇列的级别作为值参数。 要更改标签,只需设置所需的标签值即可。

ggplot(dat, aes(x,y)) + geom_point(aes(colour = cluster), alpha=0.5) +
scale_color_manual(values = levels(dat$cluster), 
                   labels = c("Cluster1","Cluster2","Cluster3", "Cluster4"))

关于r - 将十六进制字符串值硬编码为 ggplot 中的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872021/

相关文章:

r - 如何从数据集中删除异常值

r - 修改现有ggplot对象中的比例而不替换比例

ios - 在 Swift 的绘图类中设置自定义 RGB 颜色

r - 如何将第二个变量添加到直方图 ggplot 并在顶部当前直方图上绘图,从第二个变量添加密度曲线

r - ggplot2中geom_bar顶部的重叠文本

r - readOGR()无法打开文件

r - R中没有NA的多阵列平均

renderUI 在渲染之前不会被评估

java - 如何更改 JTable 中文本段落的颜色?

python - 如何自定义 tkinter/ttk 小部件和框架的边框颜色?