我有一个简单的数据框,形式为:
x y tissue color_code
1 2 nerve #EEEE00
2 3 brain #33CCCC
每个组织有数千行。每个组织的颜色代码都相同(例如,所有带有神经的行的颜色代码都为#EEEE00,等等)
我想使用相应的颜色代码对y和x以及组织的颜色进行简单的线图绘制。
到目前为止,我的代码看起来像这样
ggplot(df,aes(x=x,y=y,color=tissue))+
geom_point()+
scale_color_manual(values=df$color_code)
但是,颜色最终都是相同的颜色。
最好的方法是什么?
谢谢!
答案 0 :(得分:3)
如果您的颜色来自数据框中的另一列,则可能会导致事情无法按正确的顺序进行,就像我按原样运行您的代码时那样。组织将以某种顺序映射到颜色,如果已经是因子,则基于因子水平;如果不是,则按照字母顺序。但是df$color_code
只是颜色的向量,并且将按照它们出现的顺序分配颜色。因此,按照您的代码原样,由于此顺序之间的不匹配,我将淡黄色放置为“大脑”而不是“神经”。
这也可能无法很好地缩放-例如,您对“大脑”有两个观察结果,这意味着您要将“大脑”颜色(蓝绿色)两次放入调色板中。
我要做的是使用数据创建一个命名的颜色矢量,每种颜色发生一次。名称表示您的颜色将与正确的类别匹配,而与顺序无关。
我还添加了一些观察结果。
library(dplyr)
library(ggplot2)
df <- tribble(
~x, ~y, ~tissue, ~color_code,
1, 2, "nerve", "#EEEE00",
2, 3, "brain", "#33CCCC",
3, 2.5, "other", "#DD55AA",
4, 1, "nerve", "#EEEE00"
)
colors <- distinct(df, tissue, color_code)
pal <- colors$color_code
names(pal) <- colors$tissue
pal
#> nerve brain other
#> "#EEEE00" "#33CCCC" "#DD55AA"
ggplot(df, aes(x = x, y = y, color = tissue)) +
geom_point() +
scale_color_manual(values = pal)
由reprex package(v0.2.1)于2019-03-15创建