geom_point

时间:2018-09-06 09:29:10

标签: r ggplot2 colors geom-text

我正在尝试创建一个具有两个级别的极坐标图,类似于:enter image description here

但是我在给点着色时遇到了一些困难,然后为标签着色但又不丢失原始点的颜色。我不知道该问多个问题还是一起问我的问题。由于它们与同一张图有关,因此我将所有数字汇总在一起,但是,如果不允许这样做,请告诉我,我可以对其进行编辑,然后再对其进行表决。那简直是不公平的。我在下面发布了一个可复制的示例,并添加了注释,以使其更容易。

我有两个基本相同的数据框。其中之一有一个额外的列df2$plotter,我用它来创建数据的子集,然后绘制第二级。颜色向量cdf,是将十六进制值作为颜色的向量。

  
      
  1. 着色点
  2.   

如果这是一个级别,那么我将使用scale_color_manualfill/color这两个点。但是,由于我有两个数据帧,所以我想我可以调用color vector,也就是说可以根据向量内的值进行着色。但是它不使用我分配的那些颜色。而是将D to O标记为murky green,而不是十六进制代码grey指示的#A9A9A9,并将颜色用作图例。我希望映射如下。我不知道如何创建颜色矢量,以便将每个单元格的值用作实际颜色,该矢量也需要为标签着色。其次,当我尝试将相同的向量传递给第二级时,aesthetics中的geom_pointError: Aesthetics must be either lenght 1 or the same as the data一样,这都是通过向色调色板中添加plotter来实现的,但是很可能我猜想是向量本身的大小。我也不想创建另一个颜色矢量,而只是参考第一个。

Alice(均为Alice and Alice2)为#b79f00

Bob#00ba38

Charlie#00bfc4

Peter is#619cff`

Quin#F8766D

Roger is#f564e3`

•那么D to O#A9A9A9

  
      
  1. 对标签进行标签和着色
  2.   

我可以添加带有geom_text.的标签,然后称相同的数据和美观。我的问题部分是如上所述的着色,但是现在当我为它们着色时,我失去了color但保留了我的观点fill。观察下面。我不知道为什么我的color迷路了或者如何解决。我试图先绘制文本然后绘制点,但这并没有改变任何东西,我也不会猜到。每个标签的颜色应与其简称相同。

enter image description here

  

可复制数据:

k<-18  
ct<-12 
x_vector<-seq(1,k,1)
radius<-rep(5,k,1)
name<-c('Alice','Bob','Charlie','D','E','F','G','H','I','J','K','L','M','N','O','Peter','Quin','Roger')
df<-data.frame(x_vector,radius,name)

name2<-c('Alice2','Bob2','Charlie2','D','E','F','G','H','I','J','K','L','M','N','O','Peter2','Quin2','Roger2')
plotter<-c(1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1)
radius2<-rep(7,k,1)
df2<-data.frame(x_vector,radius2,name2,plotter)

color1<-c('#F8766D'
          ,'#F564E3'
          ,'#B79F00'
          )
other_color<-c(rep('#A9A9A9',ct))
color2<-c('#00BFC4'
          ,'#619CFF'
          ,'#00BA38'
          )
cdf<-c(color1,other_color,color2)  #color palette
df$label_radius<-df$radius+0.5  ##used to adjust the labels by a radius of 0.5
p<-ggplot()+
  ## Level1
  geom_point(data=df,aes(x=x_vector,y=radius,color=cdf,fill=cdf),size=3,shape=21)+
  geom_text(data=df,aes(x=x_vector,y=label_radius,label=name,color=name))+

  ## Level2
  geom_point(data=df2[(df2$plotter>0),], aes(x=x_vector,y=radius2,color=name2,fill=name2),size=3,shape=21)+
  geom_text(data=df2[(df2$plotter>0),], aes(x=x_vector,y=radius2,label=name2,color=name2))+

  ## transform into polar coordinates
  coord_polar(theta='x',start=0,direction=-1,clip='on')+

  ## sets up the scale to display from 0 to 7
  scale_y_continuous(limits=c(0,7))+

  ## Used to 'push' the points so all 'k' show up.
  expand_limits(x=0)
p

1 个答案:

答案 0 :(得分:1)

通常,我个人比较喜欢将所有数据都放在一个数据框中,并向其中添加另一个变量:因此,将{{1}替换为Bob1Bob2,而不是df$name 1}},然后创建df$name=Bob。 这样,为所有df$nr出现分配相同的颜色就变得容易了。

但请坚持以下示例:您可以使用Bobscale_color_manual手动设置颜色值(请参见link)。

scale_fill_manual

enter image description here