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

然而,我有一点困难,在着色的点,然后着色的标签,而不失去原来的颜色点。我不知道我是否应该用多个问题或者一起问我的问题。我把它们放在一起,因为它们与同一张图有关,但如果不允许,请让我知道,我可以在投票之前编辑。这是不公平的。我已经张贴了一个可复制的例子,下面与评论,以使它更容易。
我有两个数据,基本上是一样的。其中之一有一个额外的列,df2$plotter,我使用它创建数据的子集,然后绘制第二层。颜色向量,cdf,是一个向量,在这里我有HEX值作为颜色。
如果这是一个级别,我将使用scale_color_manual和fill/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
我可以用geom_text.添加标签,然后调用相同的数据和美学。我的部分问题是上面提到的着色,但是现在当我给它们着色时,我失去了我的color,但是保留了我点的fill。观察下面。我不知道为什么我的color会迷失方向,也不知道如何修复它们。我试着先画课文,然后再画要点,但这并没有改变什么,我也没有猜到。简而言之,每个标签的颜色应该和它的点相同。

可复制的数据:
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发布于 2018-09-06 10:44:52
一般来说,我个人倾向于将所有数据都放在一个数据中,并在其中添加另一个变量:所以,不要把Bob1和Bob2作为df$name,而是拥有df$name=Bob并创建(比方说) df$nr。然后,可以更容易地为所有Bob事件分配相同的颜色。
但是,继续您的示例:您可以使用scale_color_manual和scale_fill_manual手动设置颜色值(参见链接)。
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

https://stackoverflow.com/questions/52200929
复制相似问题