当使用color
和fill
参数调用geom_histogram()
时,ggplot2
会混淆整个x轴范围,从而无法直观地区分低值和零值。
运行以下代码:
ggplot(esubset, aes(x=exectime)) + geom_histogram(binwidth = 0.5) +
theme_bw() + scale_x_continuous(breaks=seq(0,20), limits=c(0,20))
将导致
这在视觉上很不吸引人。为了解决这个问题,我想使用
ggplot(esubset, aes(x=exectime)) + geom_histogram(binwidth = 0.5,
colour='black', fill='gray') + theme_bw() +
scale_x_continuous(breaks=seq(0,20), limits=c(0,20))
这将导致
问题是,我无法区分exectime
是否包含大于10的值,例如,12的几次出现会隐藏在横跨整个x轴的水平线后面。
2条答案
按热度按时间pvabu6sv1#
使用
coord_cartesian
代替scale_x_continuous
。coord_cartesian
设置轴范围而不影响数据的绘制方式。即使使用coord_cartesian
,仍可以使用scale_x_continuous
设置breaks
,但coord_cartesian
将覆盖scale_x_continuous
对数据绘制方式的任何影响。请注意,在下面的假数据中,我添加了一些非常小的条形图的数据。
如上图所示,如果在数据范围 * 内存在count=0 * 的柱形图,ggplot将添加一条零线,即使使用
coord_cartesian
也是如此。这会使您很难看到高度为15且高度为1的柱形图。您可以使用lwd
参数(“linewidth”)使边框变细,从而使较小的柱形图不那么模糊:另一种选择是使用
geom_bar
预先汇总数据和绘图,以获得条形图之间的空间,从而避免使用边界线来标记条形图边缘:wpx232ag2#
另一个选择是在y
aes
中使用after_stat
来检查绘制的值是否大于0,否则它将被替换为NA以确保它从直方图中删除。这样就可以在直方图中看到小值和零之间的差异,如下图所示(数据来自@eipi10):创建于2023年2月15日,使用reprex v2.0.2
如您所见,较小值与0之间存在差异。