Какую функцию R можно использовать, чтобы использовать ссылку на изображение в качестве фонового изображения на гистограмме ggplot2? - PullRequest
1 голос
/ 19 марта 2020

Я пытался создать простую программу, которая создала бы гистограмму, основанную на длине альбома, с обложкой альбома в качестве фона для изображения. Однако я не могу понять, как превратить ссылку на изображение Spotify в фоновое изображение, которое ggplot2 может анализировать в фон. Функция get_album () Spotify просто поставляется со ссылкой на изображение (например: "

https://i.scdn.co/image/ab67616d0000b273922a12ba0b5a66f034dc9959

"). Как я могу превратить это в отображаемое изображение на гистограмме ggplot2 следующим образом:

ggplot(data=album_df, aes(x=rev(factor(track_names, track_names)), y=-1 * track_length)) +
  ggtitle("Songs vs length")+
    annotation_custom(rasterGrob(album_cover, 
                               width = unit(1,"npc"), 
                               height = unit(1,"npc")), 
                               -Inf, Inf, -Inf, Inf)+
  geom_bar(stat="identity", position = "identity", color = 'NA', alpha = 0.9, width = 1, fill = 'white') +
    scale_y_continuous(expand = c(0, 0), limits = c(-1 * max_track, 0)) +
    scale_x_discrete(expand = c(0, 0)) +
  theme(axis.title.x=element_blank(), 
        axis.title.y=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank()
        ) + 
   coord_flip() 

annotation_custom - это место, где я в настоящее время храню фоновое изображение с использованием чтения в формате jpeg, однако для этого необходимо сначала загрузить изображение, которое я не могу сделать, если я ожидаю, что это будет веб-сайт c.

1 Ответ

1 голос
/ 19 марта 2020

Я не совсем понимаю, о чем вы говорите, когда говорите, что вы не можете загрузить изображение «если вы ожидаете, что это будет публичный c веб-сайт». Если вы имеете в виду вопросы лицензирования, я полагаю, что любое нелицензионное использование изображения будет иметь значение.

Вот решение, которое загружает изображение по ссылке во временный файл, который вы можете затем удалить, если хотите (обратите внимание, что у вас все еще есть изображение, сохраненное как объект, и - что более важно - вы все еще собираетесь использовать его).

Я использую изображение вашего аватара в формате png. Для изображения Spotify jpeg используйте jpeg::readJPEG().

Я использую ggpubr::background_image, потому что это облегчает этот путь, чем annotate_custom

library(ggplot2)

download.file('https://www.gravatar.com/avatar/e01b978970939af0a188df8c28136a67?s=328&d=identicon&r=PG&f=1',
              destfile= 'tmp.png')                     
img <- png::readPNG('tmp.png')

# Plot with background image
ggplot(iris, aes(Species, Sepal.Length)) +
  ggpubr::background_image(img)

Создано в 2020-03-19 представителем пакета (v0.3.0)

...