我想在y = 0以外的某个地方开始一个条形图。在我的情况下,我想在y = 1处开始条形图。
例如,假设我使用ggplot2构建了一个身份geom_bar()
图表。
df <- data.frame(values = c(1, 2, 0),
labels = c("A", "B", "C"))
library(ggplot2)
ggplot(df, aes(x = labels, y = values, fill = labels, colour = labels)) +
geom_bar(stat="identity")
现在,我不是问如何设置比例或轴限制。我希望代表小于1的值的条形从y = 1流下来。
它需要看起来像这样......但是使用不同的y轴:
有什么建议吗?
答案 0 :(得分:2)
您可以使用
ggplot(df, aes(x = labels, y = values-1, fill = labels, colour = labels)) +
geom_bar(stat = "identity") +
scale_y_continuous(name = 'values',
breaks = seq(-1, 1, 0.5),
labels = seq(-1, 1, 0.5) + 1)
答案 1 :(得分:2)
您可以手动更改标签,如另一个答案所示。但是,我认为从概念上讲,更好的解决方案是定义一个转换对象,该对象根据请求转换y轴比例。使用这种方法,您只需修改条形图的相对基线,您仍然可以像往常一样设置中断和限制。
df <- data.frame(values = c(1,2,0), labels = c("A", "B", "C"))
t_shift <- scales::trans_new("shift",
transform = function(x) {x-1},
inverse = function(x) {x+1})
ggplot(df, aes(x = labels, y = values, fill = labels, colour = labels)) +
geom_bar(stat="identity") +
scale_y_continuous(trans = t_shift)
设置中断和限制:
ggplot(df, aes(x = labels, y = values, fill = labels, colour = labels)) +
geom_bar(stat="identity") +
scale_y_continuous(trans = t_shift,
limits = c(-0.5, 2.5),
breaks = c(0, 1, 2))