Я пытаюсь создать полярную диаграмму с двумя уровнями, похожими на:
Однако у меня возникли некоторые трудности с раскрашиванием точек, а затем раскрашиванием меток без потери цвета на исходных точках. Я не знаю, стоит ли мне задавать вопросы в нескольких вопросах или все вместе. Я вычислил все вместе, так как они относятся к одному и тому же графику, но если это не разрешено, пожалуйста, дайте мне знать, и я смогу отредактировать, прежде чем за него проголосуют. Это просто несправедливо. Ниже я опубликовал воспроизводимый пример с комментариями, чтобы было проще.
У меня есть два кадра данных, которые в основном одинаковы. У одного из них есть дополнительный столбец df2$plotter
, который я использую для создания подмножества данных, чтобы затем построить второй уровень. Цветовой вектор, cdf,
- это вектор, в котором у меня есть значения HEX в качестве цветов.
- Раскраски
Если бы это был один уровень, я бы использовал точки scale_color_manual
и fill/color
таким образом. Однако, поскольку у меня есть два кадра данных, я подумал, что могу назвать color vector
, так что он будет использоваться для раскраски на основе значений в векторе. Все же это не использует те цвета, которые я назначил. Вместо этого он помечает точки D to O
как murky green
, а не grey
, как указано кодом HEX: #A9A9A9
, и использует цвет как часть легенды. Я бы предпочел отображение, как показано ниже. Я не знаю, как создать такой цветовой вектор, чтобы значения для каждой ячейки использовались в качестве фактического цвета, этот вектор также должен работать для раскраски надписей. Во-вторых, когда я пытаюсь передать тот же вектор для второго уровня, aesthetics
in geom_point
как Error: Aesthetics must be either lenght 1 or the same as the data
Это то же самое, что и добавление plotter
в цветовую палитру, но, скорее всего, я предполагаю, что делать с размером самого вектора. Я также предпочел бы не создавать другой цветовой вектор, а просто обратиться к первому.
• Alice
(оба Alice and Alice2
) равны #b79f00
• Bob
is #00ba38
• Charlie
is #00bfc4
• Peter is
# 619cff`
• Quin
is #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