使用ggplot2绘制R中的条形图

时间:2011-05-30 10:46:03

标签: r ggplot2

我有一个名为toplot_noind的数据框,如下所示。

> toplot_noind

    Chang.1  Chang.2  Chang.3  Chang.4  Chang.5  Chang.6  Chang.7  Chang.8
18    150.3     84.61     31.45     11.08     -0.19    -57.83    -88.63    -98.39

我想使用此数据框使用ggplot2绘制条形图。

我不需要列名:Chang.1,Chang.2等,在图中。

我希望这些8个值150.3,84.61,..., - 98.39出现在y轴上(18不是值的一部分,它是行的名称)。

此外,由于有8个值,我想在x轴上有8个条形 - 每个条形指向这些值。

因此,我想在x轴上将这些条形命名为1(对于第1条),2(对于第2条),3,...,8依次命名。

另外,我想将y轴标记为“总预期利润”,将x轴标记为“溢价变化”。

下面显示的是我尝试过的但它不起作用。实际上我已经尝试过阅读ggplot2,但我读到的材料无法让我理解,但我需要在我的作业中使用这个条形图。我的提交时间非常有限。

library(reshape)
library(ggplot2)

t<-ncol(toplot_noind)

a<-seq(1:t)

ggplot(toplot_noind, aes(x = a, y = toplot_noind, xlab="premium change", ylab="Total Expected Profit")) + 
 geom_bar(position = "dodge")

非常感谢所有可以帮助我的人。

艾萨克

1 个答案:

答案 0 :(得分:9)

你是说这样的意思吗? (我不确定你是否想在图表上添加值,所以我添加了它们,但是如果你不需要它们,你可以安全地删除最后一行。)

tmp <- c(150.3,84.61,31.45,11.08,-0.19,-57.83,-88.63,-98.39)
dd <- data.frame(y=tmp, x=LETTERS[1:8])
ggplot(dd, aes(x=x, y=y)) + geom_bar(fill="darkgrey") + 
  labs(x="Premium change", y="Total Expected Profit") + 
  geom_text(aes(x=x, y=ifelse(y>0, y+5, y-5), 
            label=y), size=4, colour="white")

enter image description here

添加+ coord_flip(),IMO会更好。


您的代码有什么问题?

  1. ggplot()函数需要一个data.frame,它可以从中提取命名变量,例如对于美学参数x=y=。因此,首先,您需要将对象转换为正确的data.frame并为其命名,因为它可以通过aes()来实现它的价值:

    toplot_noind <- as.data.frame(toplot_noind)
    names(toplot_noind) <- y
    

    使用与data.frame相同的名称更好。 (但请注意,它将使用强制转换操作继承其名称。)

  2. 然后,x和y标签必须在aes()函数之外。我不使用qplot(),但我认为使用xlab=ylab=可以正常使用。使用ggplot,我更喜欢labs()xlab() / ylab()函数。 E.g。

  3. 您需要将x表示为一个因素。

  4. 此处似乎没有必要使用闪避方面,因为您没有第二个交叉分类因子(请参阅help(position_dodge)中的使用示例)。

  5. 总而言之,您更正的代码如下:

    toplot_noind <- as.data.frame(toplot_noind)
    ggplot(toplot_noind, aes(x = as.factor(1:8), y = toplot_noind)) + 
      geom_bar() +
      xlab("premium change") + 
      ylab("Total Expected Profit")