我在开发一个能创建react 图表的应用程序. 对于其中之一-圆环图-我无法使图例 colored颜色 与文本标签 colored颜色 匹配. 在另一个图表上刷动时会创建一个react 性的框架.这个df然后被用来创建圆环图. 例如,画笔动作的框架看起来像这样

dng<-structure(list(Outcome = structure(3:1, levels = c("Home", "Draw", 
"Away"), class = "factor"), Counts = 4:2, `%` = c(44.44, 33.33, 
22.22), fraction = c(0.44, 0.33, 0.22), ymax = c(0.44, 0.77, 
0.99), ymin = c(0, 0.44, 0.77), labelPosition = c(0.22, 0.605, 
0.88), label = c("Away:\n 44.44%", "Draw:\n 33.33%", "Home:\n 22.22%"
)), row.names = c(NA, -3L), class = "data.frame")

以下是我为我的甜甜圈图表编写的代码

output$plotui3 <- renderPlot({
  dng<-cutoffs()
  dng$fraction<- round(dng$Counts/sum(dng$Counts),2)
  dng$ymax<- cumsum(dng$fraction)
  dng$ymin<- c(0,head(dng$ymax, n=-1))
  dng$labelPosition <- (dng$ymax + dng$ymin) / 2
  dng$label <- ifelse(dng$Counts==0, "", paste0(dng$Outcome, ":\n ", dng$'%',"%"))

  
  g3<-ggplot(dng, aes(ymin=ymin,ymax=ymax,xmax=4,xmin=3,fill=Outcome)) +
    geom_rect()+
    geom_text( x=2, aes(y=labelPosition, label=label,color=Outcome), size=6,show.legend = F)+
    coord_polar(theta="y") +
    xlim(c(0, 4)) +
    theme_ipsum() +
    theme_void()+
    scale_fill_fivethirtyeight(labels = c("Win", "Draw","Lose"),breaks = c("Home","Draw","Away"))+
    theme(legend.position="bottom",legend.text=element_text(size=20),legend.title = element_text(size=20))
  g3
})

但是,标签的 colored颜色 始终处于关闭状态

enter image description here

我想让标签与图例的 colored颜色 相匹配,以便

clrs = c(Home = "#008FD5", Draw = "#FF2700", Away = "#77AB43")

谢谢你的帮助

推荐答案

您使用的是scale_fill_fivethirtyeight,它适用于填充,但文本 colored颜色 未设置.也是scale_color_fivethirtyeight

library(ggplot2)
library(ggthemes) # scale_*_fivethirtyeight
# library(hrbrthemes) # theme_ipsum

ggplot(dng, aes(ymin=ymin, ymax=ymax, xmax=4, xmin=3, fill=Outcome)) +
    geom_rect() +
    geom_text(x=2, aes(y=labelPosition, label=label, color=Outcome), size=6, show.legend=FALSE) +
    coord_polar(theta="y") +
    xlim(c(0, 4)) +
    # theme_ipsum() +
    theme_void() +
    scale_fill_fivethirtyeight(labels=c("Win", "Draw", "Lose"), breaks=c("Home", "Draw", "Away")) +
    scale_color_fivethirtyeight(labels=c("Win", "Draw", "Lose"), breaks=c("Home", "Draw", "Away")) +
    theme(legend.position="bottom", legend.text=element_text(size=20), legend.title=element_text(size=20))

pie chart with both fill and color set to the same values

附注:多个theme*函数update来自所有先前主题集的值.当您使用诸如theme_ipsumtheme_void之类的"整个主题"函数时,它们往往会更新all attributes.在这种情况下,对theme_ipsum()的调用被theme_void()完全覆盖(因此没有影响):

setdiff(names(theme_void()), names(theme_ipsum()))
# character(0)

如果ipsum中有任何属性没有设置为空,那么theme_ipsum()将保留一些属性.

R相关问答推荐

根据R中的另一个日期从多列中 Select 最近的日期和相应的结果

无法将传奇添加到cowplot多情节中

使用R中的Shapetime裁剪格栅文件

根据模式将一列拆分为多列,并在R中进行拆分

如何使用按钮切换轨迹?

计算具有奇数日期的运行金额

在R中无法读入具有Readxl和lApply的数据集

在ggplot中为不同几何体使用不同的 colored颜色 比例

如何从像glm这样的模型中提取系数表的相关性?

以更少间隔的较小表中的聚合离散频率表

从一个列表的框架中移除列表包装器

如何在R中使用hmm TMB提前一步预测观察到的状态?

提高圣彼得堡模拟的速度

计算使一组输入值最小化的a、b和c的值

快速合并R内的值

随机生成样本,同时在R内的随机样本中至少包含一次所有值

带查找数据的FCT_REORDER.帧

如何使用ggsurvfit包更改风险表中的标签名称?

基于已有ID列创建唯一ID

根据小时-分钟列创建年-月-日序列