使用scale_y_log10使用geom_histogram时如何抑制零 [英] How to suppress zeroes when using geom_histogram with scale_y_log10

查看:681
本文介绍了使用scale_y_log10使用geom_histogram时如何抑制零的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用ggplot,geom_histogram和scale_y_log10绘制一个具有log y比例的直方图。大多数区域(计数大于1的区域)看起来是正确的:背景是透明的,直方图条带用黑色默认颜色填充。但在计数为1时,颜色被倒置:黑色背景和直方图条的透明填充。这个代码(下面)在图中产生了这个例子。



任何人都可以解释这个原因吗?我了解log scale出现的问题,但似乎无法找到解决方案。

  set.seed(1)
df我想要一个简单的解决方法,或者我忽略了一些东西。 < - data.frame(E = sample(runif(100),20,TRUE))
ggplot(df,aes(E))+ geom_histogram(binwidth = 0.1)+ scale_y_log10(limits = c(0.1, 100))+ xlim(0,1)

解决方案

您可以将 drop = TRUE 添加到 geom_histogram 调用中,以使用零计数删除分档(请参阅

  set.seed(1)
df< - data.frame(E = sample(runif(100),20,TRUE))
ggplot(df,aes(E))+
geom_histogram(binwidth = 0.1,drop = TRUE)+
scale_y_log10(limits = c(0.1,100))+
xlim(0,1)



编辑:由于比例从1开始,因此不可能显示高度为1的条。如这个答案,你可以选择从不同层面开始,但可能会产生误导。这里是这个代码:

pre $ require(比例)
mylog_trans< -
函数(base = x(b)= exp(1),从= 0)
{
trans < - function(x)log(x,base) - from
inv < x + from)
trans_new(mylog,trans,inv,log_breaks(base = base),domain = c(base ^ from,Inf))
}

ggplot (df,aes(E))+
geom_histogram(binwidth = 0.1,drop = TRUE)+
scale_y_continuous(trans = mylog_trans(base = 10,from = -1),limits = c(0.1, 100))+
xlim(0,1)


I'm trying to plot a histogram with a log y scale using ggplot, geom_histogram and scale_y_log10. Most regions (those with counts greater than 1) appear correct: the background is transparent and the histogram bars are filled with the default color black. But at counts of 1, the colors are inverted: black background and transparent fill of the histogram bars. This code (below) generates the example in the graph.

Can anyone explain the cause of this? I understand the problems that come with log scales but I can't seem to find a solution to this. I'm hoping there's a easy fix, or that I overlooked something.

set.seed(1)
df <- data.frame(E=sample(runif(100), 20, TRUE))
ggplot(df,aes(E)) + geom_histogram(binwidth=0.1) + scale_y_log10(limits=c(0.1,100)) + xlim(0,1)

解决方案

You can add drop=TRUE to the geom_histogram call to drop bins with zero counts (see ?stat_bin for details):

set.seed(1)
df <- data.frame(E=sample(runif(100), 20, TRUE))
ggplot(df,aes(E)) + 
  geom_histogram(binwidth=0.1, drop=TRUE) + 
  scale_y_log10(limits=c(0.1,100)) + 
  xlim(0,1)

EDIT: Since the scale starts at 1, it is impossible to display a bar of height 1. As mentioned in this answer, you can choose to start at different levels, but it may become misleading. Here's the code for this anyway:

require(scales)
mylog_trans <- 
function (base = exp(1), from = 0) 
{
  trans <- function(x) log(x, base) - from
  inv <- function(x) base^(x + from)
  trans_new("mylog", trans, inv, log_breaks(base = base), domain = c(base^from, Inf))
}

ggplot(df,aes(E)) + 
  geom_histogram(binwidth=0.1, drop=TRUE) + 
  scale_y_continuous(trans = mylog_trans(base=10, from=-1), limits=c(0.1,100)) +
  xlim(0,1)

这篇关于使用scale_y_log10使用geom_histogram时如何抑制零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆