Тикз не работает с фиксированными факторами в ggplot2 - PullRequest
0 голосов
/ 31 марта 2020

Я создал несколько фигур с помощью ggplot2 и назначил фиксированные цвета различным группам (см. ggplot2: Фиксировать цвета на уровнях фактора и ggplot2: Фиксировать цвета на уровнях фактора с длинными именами факторов ) .

Однако сейчас я сталкиваюсь с проблемой, что рисунок больше не может быть экспортирован в .tex-файл через tikz. Без фиксированных цветов это работало очень хорошо! Не могли бы вы помочь мне?

library(ggplot2)
library(stringr)
library(scales)
library(tikzDevice)

latex_percent <- function (x) {
  x <- plyr::round_any(x, scales:::precision(x)/100)
  stringr::str_c(comma(x * 100), "\\%")}

list_of_factors <- list(paste("Aaljdfgneopgh", "pihjwgwgvldjnfgp wghiwg", sep="\n"),
                        paste("Baodjfwapi gaafgja3jgamdg", "vaksmngvaksn",sep="\n"),
                        paste("Cskn", "dvlsnvljengwlankgaksnbvalsknbsfbl", "skn",sep="\n"),
                        paste("Dafsnjljbi", "penbvmdsvsmvslkb", "ndfbkndfb",sep="\n"))

myColors = c("red", "green", "blue", "yellow")


scale_fill_ind <- function(...){
  ggplot2:::manual_scale(
    'fill', 
    values = setNames(myColors, list_of_factors), 
    ...
  )
}                      


df1 <- data.frame(Value = c(40, 20, 10, 60), 
                  Type = c("Aaljdfgneopgh pihjwgwgvldjnfgp wghiwg", "Baodjfwapi gaafgja3jgamdg vaksmngvaksn", "Cskn dvlsnvljengwlankgaksnbvalsknbsfbl skn", "Dafsnjljbi penbvmdsvsmvslkb ndfbkndfb"),
                  Year = c("2020","2019","2018","2018-2020"),
                  Count = c("1500","2500","2700","2800"))

p <- ggplot(df1, aes(x = factor(df1$Year, level=c('2018-2020','2018','2019','2020')), y = df1$Value, size = as.numeric(df1$Count), fill = str_wrap(df1$Type,25))) +
  ylab('Put ylab here') + xlab('Year') + 
  geom_point(shape=21, alpha = 0.5) +  
  scale_y_continuous(limits = c(0,100), labels=latex_percent) +  
  scale_size_continuous(breaks=c(1000,2000,3000), limits=c(0,3000), labels=c("1,000","2,000","3,000"), range=c(6,22)) +   
  guides(fill = guide_legend(override.aes = list(size = 6, shape=22))) +  
  labs(size = "Count", fill = "") 
p <- p + scale_x_discrete(label=c("average 2018-2020","2018","2019","2020")) + scale_fill_ind()
p

tikz("C:/.../test.tex", width=14,height=10, pointsize=1)
dev.off()
...