我想绘制一些数据直方图样式。缩放数据,以便单个观察值为100. 但是,数据将按类别分解为文档的单独部分,因此大多数组的最大值不会为100。
我希望我的图表使用 log10 y轴 ,并使用 固定0到100比例
以下内容遵循日志转换,但忽略0-100范围并发出警告。我已经尝试了coord_cartesian(ylim = c(0,100))和scale_y_continuous(trans = log10_trans())的其他排列,但没有运气。
library(ggplot2)
toread <- "general specific satisfaction
fruit apple 9
fruit apple 8
fruit banana 8
fruit banana 7
fruit pear 6
veg carrot 7
veg celery 4
veg turnip 3
veg turnip 2
veg turnip 1
grain pasta 6
grain quinoa 3
grain brownrice 2
grain brownrice 6"
foodprefs <- read.table(textConnection(toread), header = TRUE)
closeAllConnections()
foodprefs$pct.max <- (foodprefs$satisfaction / max(foodprefs$satisfaction)) * 100
lapply(sort(unique(
as.character(foodprefs$general))), function(one.cat) {
temp <- foodprefs[foodprefs$general == one.cat , ]
ggplot(temp, aes(x = specific, y = pct.max)) +
geom_boxplot() +
ylim(0, 100) +
scale_y_log10() +
coord_flip()
})
答案 0 :(得分:1)
您的代码有两个问题:
ylim()
建立y轴的比例,这就是为什么你得到关于指定第二个比例(对数比例)的警告,它将覆盖第一个比例。这就是为什么你的ylims不会坚持&#34;。log10(0)
=无限,无法绘制,因此对于日志比例功能,限制无效。另外,使用 plyr 包可以简化代码。以下代码使用scale_y_log10
来指定限制,并解决这两个问题。此外,使用 plyr 可以使代码更清晰。
library(plyr)
dlply(foodprefs, .(general), function(one.cat) {
ggplot(one.cat, aes(x = specific, y = pct.max)) +
geom_boxplot() +
scale_y_log10(limits = c(1, 100)) +
coord_flip()
})
我不确定日志比例是否能在这里实现出色的可视化效果,但是你去了。