1

我一直在 R 中构建条形图,但我注意到了一个问题。每当制作图表时,条形和轴之间的间隙非常小,导致出现背景图像的线条(链接)。我怎样才能摆脱这个?

代码:

album_cover <- image_read("https://i.scdn.co/image/ab67616d0000b273922a12ba0b5a66f034dc9959")
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_image(image = "https://i.scdn.co/image/ab67616d0000b273922a12ba0b5a66f034dc9959", size = 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()

4

1 回答 1

0

有趣的问题。我尝试了很多东西,包括对许多主题元素的修改。它适用于theme_void(),但是当您添加回情节元素(即出于某种原因,轴上的歌曲标题)时,问题再次出现。

最终起作用的只是将您的图像压缩到略小于 1。在这种情况下,只需从 1 更改为 0.999 即可解决问题,并且您不再有图像条挂在右侧。为此,我编写了自己的数据,但我使用的是相同的图像:

df <- data.frame(
  track_names=paste0('Song',1:8),
  track_length=c(3.5,7.5,5,3,7,10,6,7.4)
)
album_cover <- image_read2("https://i.scdn.co/image/ab67616d0000b273922a12ba0b5a66f034dc9959")

ggplot(data=df, aes(x=track_names, y=-1*track_length)) +
  annotation_custom(rasterGrob(album_cover,
       width=unit(0.999,'npc'), height=unit(1,'npc')),
       xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) +
  geom_col(alpha=0.9, width=1, fill='white', color=NA) +
  scale_y_continuous(expand=c(0,0)) +
  scale_x_discrete(expand=c(0,0)) +
  ggtitle('Songs vs Length') +
  coord_flip()

在此处输入图像描述

width=unit(1, 'npc'),...注意,上面相同的代码在函数中给出了下面的图像rasterGrob()(注意图像右侧的行):

在此处输入图像描述

于 2020-05-07T18:15:40.493 回答