Прозрачность изображения изменяется (прозрачна) после изменения альфа-диапазона! ggplot2

#r #pdf #ggplot2 #r-markdown #xelatex

Вопрос:

Я пытаюсь добавить следующее изображение на эту диаграмму, однако, как вы можете видеть, когда я использую его для создания pdf-файла, изображение становится прозрачным! с этим альфой 45-го калибра. Если я установлю альфа на 1, то он будет отображаться так, как и должно быть!

В этом примере я использую alpha только для того, чтобы сделать вторую диаграмму dodge прозрачной, но включенный png должен быть на 100% цветным, не выцветшим! Знаете ли вы какой-нибудь способ добиться этого, я все еще хочу, чтобы эти наборы полос исчезли с альфа-изображением, но изображение осталось нетронутым.

Обратите внимание, что если вы просто запустите это в своем Rmarkdown, изображение в предварительном просмотре будет выглядеть превосходно, проблема возникнет, когда мы свяжем и создадим pdf-файл!

Пожалуйста, Помогите

Это выцветший нежелательный результат изображения лошади на графике при переходе в pdf:

введите описание изображения здесь

Фактический значок-это: введите описание изображения здесь

Код, который я использовал, находится здесь:

 library(ggplot2)
library(reshape2)
library(grid)

#Create DataFrame
x <- c(5,17,31,9,17,10,30,28,16,29,14,34)
y <- c(39,6,3,4,1,6,7,2,9,10,3,4)
day <- c("d1","cd2","d3","d4","d5","d6","d7","d8","d9","d10","d11","d12")
df1 <- data.frame(x, y, day)

#Sort the table according to x values
df1$day <- factor(df1$day, levels = df1[order(-df1$x), 3])

#for each day (e.g. 1) you will have all combinations of x and y (e.g. day = 1, x = 5, y = 5), (e.g. day = 12, x=34, y=4). variable becomes x and y, and value becomes the value of either x or y.
df2 <- melt(df1, id.var="day", measure.var=c("x","y"))
#head(df2)

#Image
img <- readPNG("imgs/unnamed.png")
g <- rasterGrob(img, interpolate=TRUE)


barcolors <- c("#428953", "#CE2929", "#A3DD57", "#77E599", "#5675D6", "#65ECEF", "#FF8B07", "#D0B100", "#636363", "#D0B100", "#CE2929", "#428953")

ggplot(df2, aes(x=day, y=value))   
    geom_bar(aes(fill=day, alpha=variable), stat="identity", width = .75, position = position_dodge(width=.8))  
    scale_alpha_manual(values=c(1, .45))  
    scale_fill_manual(values= barcolors)  
    theme_bw()   
    theme( panel.grid.major.x = element_blank(),
       legend.position="none",
       legend.text=element_text(size=14),
       legend.title = element_blank(),
       axis.title.x = element_blank())  
    annotation_custom(g, xmin=.7, xmax=1.3, ymin=35, ymax=40)   ylim(0,40)   
 

Комментарии:

1. Попробуйте переместить alpha= отображение из глобального ggplot() вызова aes() внутрь geom_bar , так как вы хотите, чтобы это повлияло только на бары.

2. Я сделал это, но все равно получил тот же результат! так что это не сработало

Ответ №1:

Это может быть не объяснением причины, а рабочим решением.

 library(tidyverse)
library(reshape2)
library(grid)
library(png)

df = tibble(
  x = c(5,17,31,9,17,10,30,28,16,29,14,34),
  y = c(39,6,3,4,1,6,7,2,9,10,3,4),
  day = c("d1","cd2","d3","d4","d5","d6","d7","d8","d9","d10","d11","d12")
) %>% mutate(
  day = day %>% fct_reorder(x)
) %>% pivot_longer(cols=1:2, names_to = "variable", values_to = "value")

img <- readPNG("imgs/unnamed.png")
g <- rasterGrob(img, interpolate=TRUE)

barcolors <- c("#428953", "#CE2929", "#A3DD57", "#77E599", "#5675D6", "#65ECEF", "#FF8B07", "#D0B100", "#636363", "#D0B100", "#CE2929", "#428953")
df %>% ggplot(aes(x=day, y=value, alpha=variable))   
  geom_bar(aes(fill=day), stat="identity", width = .75, position = position_dodge(width=.8)) 
  annotation_custom(g, xmin=.7, xmax=1.3, ymin=35, ymax=40) 
  annotation_custom(g, xmin=.7, xmax=1.3, ymin=35, ymax=40) 
  scale_alpha_manual(values=c(1, .45))  
  scale_fill_manual(values= barcolors)  
  theme_bw()   
  theme( panel.grid.major.x = element_blank(),
         legend.position="none",
         legend.text=element_text(size=14),
         legend.title = element_blank(),
         axis.title.x = element_blank())   
  ylim(0,40)
 

Ниже приведена выдержка из pdf-файла.
введите описание изображения здесь
А вот фрагмент из HTML-файла.
введите описание изображения здесь

Комментарии:

1. Я позволил себе слегка изменить ваш чит на более dplyr-стиль.

2. Проверив свой пример, просто добавьте annotation_custom(g, xmin=.7, xmax=1.3, ymin=35, ymax=40) annotation_custom(g, xmin=.7, xmax=1.3, ymin=35, ymax=40) дважды сделали свое дело.