【问题标题】:Wrong order of y axis in ggplot barplotggplot barplot中y轴的顺序错误
【发布时间】:2014-09-24 16:56:13
【问题描述】:

在此条形图中,条形的缩放方式不同。所以 y 轴没有正确排序(157 > 1342.6)。我该如何解决这个问题?

library(reshape)
library(ggplot2)

data <- matrix(1:9, 3, 3)
colnames(data) <- c("approach", "best", "worst")
data[1,] <- c("a", 1.8, 157.0)
data[2,] <- c("b", 592.3, 1342.6)
data[3,] <- c("c", 613.1, 3744.1)
data <- as.data.frame(data)
data <- melt(data, id="approach")

p <- ggplot(data, aes(x=approach, y=value, fill=variable)) +
  geom_bar(position="dodge", stat="identity")
p

提前致谢。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    你需要在你的值列中有数值,目前你有因素:

    library(reshape)
    library(ggplot2)
    
    data <- matrix(1:9, 3, 3)
    colnames(data) <- c("approach", "best", "worst")
    data[1,] <- c("a", 1.8, 157.0)
    data[2,] <- c("b", 592.3, 1342.6)
    data[3,] <- c("c", 613.1, 3744.1)
    data <- as.data.frame(data)
    data <- melt(data, id="approach")
    
    data$value = as.double(levels(data$value))[data$value] # <-- converting 
    
    p <- ggplot(data, aes(x=approach, y=value, fill=variable)) +
      geom_bar(position="dodge", stat="identity")
    p
    

    【讨论】:

    • 这会将数据仅更改为 1-6。但我希望实际值在 1.8 到 ~4000 之间。
    • @dbrettschneider 我改变了它,但我不知道如何更好地转换值。
    • @dbrettschneider 我添加了图片,这是你想要的吗?
    • 是的,非常感谢。但我真的不喜欢这种解决方案。 ggplot 应该自动执行此操作...
    • @dbrettschneider R 中的矩阵将数据存储为一个type。为了避免事后需要将字符转换为数字,您可以将数据直接放在data.frame 中,而不是从matrix 开始。示例:dat2 = data.frame(approach = c("a", "b", "c"), best = c(1.8, 592.3, 613.1), worst = c(157.0, 1342.6, 3744.1))
    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 2022-12-16
    • 2017-11-22
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多