为什么这个ggplot只绘制没有值的网格?

时间:2017-09-04 18:41:44

标签: r ggplot2 bar-chart visualization

我试图在ggplot中绘制条形图,但我不断只获得网格。这显然是关于draw nothing here的演示,但我想了解如何以最简单的方式显示值。

enter image description here

   library(ggplot2)
    testData<-data.frame(x=c("a","b","c","d","e","f"), y=c(10,6,9,28,10,17))
    bar <- ggplot(data=testData, aes(x=c("a","b","c","d","e","f"), y=c(10,6,9,28,10,17), fill = "#FFCC00"))

我可以获得这些图的一种方法是geom_bar

enter image description here

bar <- ggplot(data=testData, aes(x=c("a","b","c","d","e","f"), y=c(10,6,9,28,10,17), fill = "#FFCC00")) + geom_bar(stat="identity")

为什么没有在第一个条形图上绘制值以及如何以最简单的方式修复它?这种用+绘制方式背后的想法是什么?它叫什么?

1 个答案:

答案 0 :(得分:5)

使用 ggplot2 包,调用ggplot()只是为了调用基本网格;它就像在绘制图形之前取出一张方格纸一样。在任何一种情况下,准备好网格与绘制图形无关。这就是为什么运行以下命令将导致第一个示例中的空网格:

ggplot(data=testData, aes(x=x, y=y, fill = "#FFCC00"))

与使用plot()或hist()之类的函数不同,后者准备网格并同时绘制数据:

plot(x=x,y=y,data=testData)

hist(x=x,data=testData)

&#34; +&#34;在ggplot中只是一种说法,有更多与ggplot相关的参数,我们想要包含在第一个空白网格之上。这就是为什么每一行用&#34; +&#34;通常称为图层。

因此,如果我们想制作一个简单的散点图,我们在网格顶部添加点:

testData<-data.frame(x=c(1:6), y=c(10,6,9,28,10,17))

ggplot(data=testData,aes(x=x,y=y)) +
  geom_point()

输出:

enter image description here

如果我们想在该散点图中添加行,我们只需添加一行代码:

ggplot(data=testData,aes(x=x,y=y)) +
  geom_point() +
  geom_line()

输出:

enter image description here

如果需要,我们可以继续添加这样的图层。请注意,它们将按您键入的顺序打印(即前几行将在它们之后打印的行下面):

ggplot(data=testData,aes(x=x,y=y)) +
  geom_bar(stat="identity",fill="#00BFC4") +
  geom_point() +
  geom_line()

输出:

enter image description here

另外,请注意,建议不要在ggplot调用中多次调用您的数据;这可能会导致错误。

不要使用:

ggplot(data=testData, aes(x=c("a","b","c","d","e","f"), 
                      y=c(10,6,9,28,10,17), fill = "#FFCC00")) + 
  geom_bar(stat="identity")

#or

ggplot(data=testData, aes(x=testData$x, y=testData$x, fill = "#FFCC00")) + 
  geom_bar(stat="identity")

改为使用:

ggplot(data=testData, aes(x=x, y=y, fill="#FFCC00")) +
  geom_bar(stat="identity")

如果要绘制未在第一个ggplot()行中调用的数据帧中的数据,则只需将数据参数添加到&#34;层&#34;使用不同的数据框,如下所示:

ggplot(data=testData,aes(x=x,y=y)) +
  geom_bar(stat="identity",fill="#00BFC4") +
  geom_point(data=differentDf, aes(x=x,y=y)) +
  geom_line(data=differentDf, aes(x=x,y=y))