数据可以在这里下载:https://docs.google.com/spreadsheets/d/1McbcquHdsdlEM_yPfBQHeX_CpUcARAm1I3VtASNsY3k/edit?usp=sharing
这是我的代码
# load data
raw_data <- read.csv("Sleep vs reaction time (Responses) - Form Responses 1.csv")
library(ggplot2)
#histogram
qplot(x = Age, data = raw_data, xlim = c(13,43), geom = "histogram") + scale_x_continuous()
qplot(x = Age, data = raw_data, xlim = c(13,43), geom = "histogram") + scale_x_discrete()
我想按年龄绘制直方图。
它是离散值(年龄是整数)所以我使用 scale_x_discrete 来分隔条形图。然而,它看起来像
左边有空格。
如果我使用 scale_x_continuous(),左边的空间将消失,但条形之间的分隔也消失了。
我想摆脱左侧的空间,从 0 到 13,但保留栏之间的分隔。请告诉我怎么做。
谢谢。
我的解决方案:
感谢@Gregor,这是我的解决方案:
raw_data$Age = factor(raw_data$Age) #convert Age column to factor
qplot(x = Age, data = raw_data, geom = "histogram") + scale_x_discrete()
结果:
最佳答案
您应该让数据的类别决定尺度是离散的还是连续的。 ggplot
没有对整数尺度的内置支持,因为它不同于数字尺度,所以如果你想要一个离散尺度,你应该将你的年龄数据转换为 factor
(如果还没有的话):
raw_data$Age_factor = factor(raw_data$Age)
如果您不指定xlim
,那么默认值将为您提供您想要的。
qplot(x = Age_factor, data = raw_data, geom = "histogram")
这有点令人困惑,但实际上是您的 xlim = c(13, 43)
将您的图形向右移动。在离散尺度上,13 和 43 指的是第 13 和 43 个离散级别,因此通过设置这些 xlim,您可以强制数据向右移动。
关于使用 scale_x_discrete() 删除图的左侧(从 0 到 13),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799688/