在图例中的值之间更改比例

时间:2019-08-08 22:15:03

标签: r ggplot2 legend

我正在尝试显示基于人数的数据图,以通过使用ggplot瓦片图显示热图。大多数计数(大约90%)都在100以内,但是我仍然希望显示〜5000的最大值。我无法弄清楚如何将图例更改为不像下面的图片那样紧缩。有没有一种方法可以更改图例中刻度线之间使用的值,以便我可以显示1-50,然后在每个刻度之间跳较大的空格,而无需实际将其显示为图例中每个值之间的不同距离?

不幸的是,由于我的帐户太新,我无法发布图片,因此这里是图片的链接

以下代码是我到目前为止所拥有的...我知道它正在使用我的特定代码,但是我相信这与我正在使用的ggplot2函数和参数有关,而不是因为数据

ggplot(un.lp.count.1.2, aes(x = item.name, y = last.item)) +
  geom_tile(aes(fill = n)) +
  scale_fill_gradientn(colors = topo.colors(20), values=cval5, name = 'n', breaks=cval, labels=format(cval)) +
  ggtitle('Heatmap for numUniqueItems 1&2') +
  xlab('Most Crazed Item') +
  ylab('Last Purchased Item') +
  facet_grid(last.category~category, scales='free', space='free') +
  theme(
    axis.text.x=element_text(angle=90, size = 5, vjust=.1),
    axis.text.y=element_text(angle=0, size = 5, hjust=.1),
    strip.text.y = element_text(angle=0, size = 5),
    strip.text.x = element_text(angle=0,size=5),
    legend.position = 'right',
    legend.direction = 'vertical',
    legend.text = element_text(size=5, angle = 0),
    legend.key.width = unit(.1, 'line'),
    legend.key.height = unit(5, 'line')
     )

我希望有人能帮助我,以便它仅显示图例以在每个刻度线之间显示相等的间距,但是每个相邻值之间的值距离可能与其他值不同

1 个答案:

答案 0 :(得分:0)

由于您希望刻度线在视觉上等距分布,但表示刻度线之间的距离不同,因此我认为您想使用一个变换。例如,查看这两个图之间的差异。

df <- data.frame(
  x = rep(c(2, 5, 7, 9, 12), 2),
  y = rep(c(1, 2), each = 5),
  z = rep(c(10,30,50,100,5000), each = 2)
)

ggplot(df, aes(x, y)) +
  geom_tile(aes(fill = z), colour = "grey50") +
  scale_fill_gradientn(colors = topo.colors(20))

ggplot(df, aes(x, y)) +
  geom_tile(aes(fill = z), colour = "grey50") +
  scale_fill_gradientn(colors = topo.colors(20),
                       trans = "log10", 
                      limits = c(1,10000), 
                      breaks = c(1,3,10,30,100,300,1000,3000,10000))

在第二个中,我使用以下转换:

 trans = "log10"

您可以将其更改为另一种转换,然后找到最适合您的转换。