【问题标题】:how to change x-axis limits ggplot2 r如何更改x轴限制ggplot2 r
【发布时间】:2016-06-23 17:54:29
【问题描述】:

我想使用 ggplot 条形图设置 x 轴的限制。整个情节还可以,但是当我使用 ylim(1,6) (这些是我需要的限制)时,条形消失了。

数据:

var.A <- as.numeric(c(1:13))
var.B <- c(4.351833, 2.938000, 4.726465, 3.747162, 3.720737, 4.297117, 4.304500, 4.061277, 4.595236, 4.105444, 3.701684, 3.523563, 4.170000)
df <- data.frame(var.A,var.B)

ggplot代码:

    ggplot(df, aes(x=factor(var.A), y=var.B)) + 
  geom_bar(position=position_dodge(), stat="identity", fill="#fff68f", colour="darkgrey", width = 0.4) +
  coord_flip()+
  xlab("") +
  ylab("") +
  scale_x_discrete(labels=c("aaaaaaa aaaaa","bbbbb bbb bbbb","cccc ccc","dddd dd ddddd",
                            "eee e eeeee e ee","ffffffff","gggggggg","hhhhhhh","iiii",
                            "jjjjjj","kkkkkkk","llllll","mmmmmmmm"))

当我添加:ylim(1,6) + 时出现问题。

还有一件事。每个条的颜色设置为fill="#fff68f"。是否有任何解决方案可以改变一个条的颜色,例如我希望从顶部开始的第一个不同,即#ee2c2c

【问题讨论】:

  • 我确实输入了错误的 ggplot 代码。我错过了 coord_flip() + 现在没关系,
  • 尝试使用coord_flip(ylim = c(1,6)) 。查看coord_cartesian 的帮助,它解释了两种设置限制的方式之间的区别。按照您的操作方式,超出限制的每个观察值都设置为 NA,并且由于所有条形图都从 0 开始,因此就是全部。

标签: r ggplot2 bar-chart axis limits


【解决方案1】:

因为您使用了coord_flip(),所以您可以使用scale_y_continuous(expand=c(0,0),limits=c(1,6),oob = rescale_none) 设置x 轴的限制,并且您可以使用scale_fill_manual(values = c("#ee2c2c",...) 设置每个条形的颜色。

因此,如果您想手动设置条形的颜色,您首先需要创建名称向量并将其插入数据框中:

names <- c("aaaaaaa aaaaa","bbbbb bbb bbbb","cccc ccc","dddd dd ddddd",
"eee e eeeee e ee","ffffffff","gggggggg","hhhhhhh","iiii",
"jjjjjj","kkkkkkk","llllll","mmmmmmmm")

var.A <- as.numeric(c(1:13))
var.B <- c(4.351833, 2.938000, 4.726465, 3.747162, 3.720737, 4.297117, 4.304500, 4.061277, 4.595236, 4.105444, 3.701684, 3.523563, 4.170000)
df <- data.frame(var.A,var.B,names)

要在 ggplot 中对变量名称和颜色进行排序,您需要将向量的结构从字符更改为因子(以获取级别)。

var.names = factor(df$names,
                levels = c("aaaaaaa aaaaa","bbbbb bbb bbbb","cccc ccc","dddd dd ddddd", "eee e eeeee e ee","ffffffff","gggggggg","hhhhhhh","iiii", "jjjjjj","kkkkkkk","llllll","mmmmmmmm"), ordered=T)

所以你的代码看起来像:

ggplot(df, aes(x=var.names, y=var.B, fill=as.factor(var.names))) + 
  geom_bar(position=position_dodge(), stat="identity", width = 0.4) +
  coord_flip()+
  scale_y_continuous(expand=c(0,0),limits=c(1,6),oob = rescale_none) +
  xlab("") +
  ylab("") +
  scale_fill_manual(values = c(c(rep("#fff68f",12)),"#ee2c2c"))

输出是

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    相关资源
    最近更新 更多