首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >geom_point中的着色和标号点

geom_point中的着色和标号点
EN

Stack Overflow用户
提问于 2018-09-06 09:29:09
回答 1查看 3.8K关注 0票数 2

我正在尝试创建一个极坐标图,其两个级别类似于:

然而,我有一点困难,在着色的点,然后着色的标签,而不失去原来的颜色点。我不知道我是否应该用多个问题或者一起问我的问题。我把它们放在一起,因为它们与同一张图有关,但如果不允许,请让我知道,我可以在投票之前编辑。这是不公平的。我已经张贴了一个可复制的例子,下面与评论,以使它更容易。

我有两个数据,基本上是一样的。其中之一有一个额外的列,df2$plotter,我使用它创建数据的子集,然后绘制第二层。颜色向量,cdf,是一个向量,在这里我有HEX值作为颜色。

  1. 着色点

如果这是一个级别,我将使用scale_color_manualfill/color的点数的方式。但是,由于我有两个数据格式,所以我想我可以调用一个color vector,这样就可以根据向量中的值对其进行着色。但是它没有使用我指定的那些颜色。相反,它将D to O标记为murky green,而不是HEX代码:#A9A9A9所指示的grey,并使用颜色作为图例的一部分。我更喜欢如下所示的地图。我不知道如何创建一个颜色向量,即每个单元格的值被用作实际的颜色,这个向量也需要对标签进行着色。其次,当我试图为第二层传递相同的向量时,aesthetics中的geom_point作为Error: Aesthetics must be either lenght 1 or the same as the data --这两者都是将plotter添加到调色板中,但我很可能猜的是向量本身的大小。我也不喜欢创建另一个颜色向量,而只是简单地参考第一个颜色向量。

·Alice (两个Alice and Alice2)都是#b79f00

·Bob#00ba38

·Charlie#00bfc4

·Peter is#619‘

·Quin#F8766D

·Roger is#f564e3‘

·那么D to O就是#A9A9A9

  1. 标签和着色

我可以用geom_text.添加标签,然后调用相同的数据和美学。我的部分问题是上面提到的着色,但是现在当我给它们着色时,我失去了我的color,但是保留了我点的fill。观察下面。我不知道为什么我的color会迷失方向,也不知道如何修复它们。我试着先画课文,然后再画要点,但这并没有改变什么,我也没有猜到。简而言之,每个标签的颜色应该和它的点相同。

可复制的数据:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-06 10:44:52

一般来说,我个人倾向于将所有数据都放在一个数据中,并在其中添加另一个变量:所以,不要把Bob1Bob2作为df$name,而是拥有df$name=Bob并创建(比方说) df$nr。然后,可以更容易地为所有Bob事件分配相同的颜色。

但是,继续您的示例:您可以使用scale_color_manualscale_fill_manual手动设置颜色值(参见链接)。

代码语言:javascript
复制
    library(ggplot2)
    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','Charlie','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(rep('#F8766D',2), # Alice and Alice2
              rep('#F564E3',2), # Bob and Bob2
              rep('#B79F00',1)  # Charlie
    )
    other_color<-c(rep('#A9A9A9',12))
    color2<-c(rep('#00BFC4',2),
              rep('#619CFF',2),
              rep('#00BA38',2)
    )
    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=name,fill=name),size=3,shape=21)+
      scale_color_manual(values=cdf)+
      scale_fill_manual(values=cdf)+
      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')+ # <-- the clip property does not work for me, probably due to my ggplot version 

      ## 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52200929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档