在R堆叠栏中控制时间序列轴标签和颜色

时间:2018-06-29 11:53:38

标签: r ggplot2

enter image description here

我正在尝试绘制堆积的条形图。它的工作,但仍然有一些我不明白的功能,例如,xts能做什么?我是否正在使用所有已加载的库?替换轴标签,它可以处理原始数据,但不能处理融化的数据(数据被融化以生成堆积条,因为我没有找到其他使用data.frame生成堆积条的方法)。我也想为该堆叠栏使用单色。我尝试将'fill = variable'替换为'fill = c(“ orange”,“ blue”,“ green”)'',只是尝试不起作用。请帮助。.谢谢..

library(ggplot2)
library(xts)
library(reshape2)
library(lubridate)
library(zoo)
setwd("C:/Users/Hp/Documents/yr")
data1 <- read.csv("yr1983.csv", head = TRUE, stringsAsFactors = FALSE)
data1$Date <- dmy(data1$Date)
#data1 <- xts(x = data1[,-1], order.by = data1[,1])

head(data1)
         Date Inland middle coastal
 1 1983-11-01    0.0    0.0     0.0
 2 1983-11-02    0.0    0.0     0.0
 3 1983-11-03   90.5   19.5    60.0
 4 1983-11-04   88.5   28.5    53.8
 5 1983-11-05   80.5   73.0   122.0
 6 1983-11-06  179.5  102.0   141.3

#plot stacked bar
data.m <- melt(data1,id.vars = "Date")
p1 <- ggplot(data.m, aes(x = Date, y = value,fill=variable)) + 
geom_bar(stat='identity')
p1

#try to rename the axis - error
  Rainfall_Intensity <- data1$value
  month <- data1$Date
  ggplot(data.m, aes(x = month, y = Rainfall_Intensity,fill= variable)) + 
  geom_bar(stat='identity')
  *Error: Aesthetics must be either length 1 or the same as the data (276): x, y, fill

  ggplot(data1, aes(month, y = Rainfall_Intensity,fill= variable)) + geom_bar(stat='identity')
 *Error in eval(expr, envir, enclos) : object 'Date' not found

3 个答案:

答案 0 :(得分:1)

看起来:

Rainfall_Intensity <- data1$value
month <- data1$Date

变量Rainfall_Intensity和month不在 data.m 内。因此,当您使用ggplot时,它会产生上述错误。您必须重命名变量:

rename(data.m,Rainfall_Intensity = value, month = Date)

然后,运行ggplot2。

答案 1 :(得分:1)

fill = variable下的

aes指的是应该根据其分隔堆积条形的变量。要更改堆叠条形的颜色,您想更改geom_bar

下的填充
ggplot(data.m, aes(x = Date, y = value,fill=variable)) 
             + geom_bar(stat='identity', fill = c("orange", "blue", "green"))

您可以参考-http://sape.inf.usi.ch/quick-reference/ggplot2/colour-选择颜色。

答案 2 :(得分:1)

ggplot2在整个数据帧上运行,因此它希望您用来映射aes中的美学的任何名称都是提供给data的数据框中的裸列名称。初始ggplot调用的参数,或特定几何图形的data参数。因此,如果您有一个名为date的全局变量,并且您调用了ggplot(data, aes(x = date, y = value)),它将在data中寻找名为date的列,如果其中一个找不到。

如果需要重命名数据框中的列,则可以使用许多不同的方式,例如names(data.m) <- c(...)setNames(data.m, c(...))

但是,如果您需要做的只是更改轴标签,则可以在构建绘图时进行。要么使用labs分配标签,要么在相应的缩放功能内分配单个标签。

使用labs一次更改多个标签(我只是根据数据样本猜测):

library(tidyverse)

...

ggplot(data.m, aes(x = Date, y = value, fill = variable)) +
  geom_col() +
  labs(x = "Month", y = "Rainfall intensity", fill = "Location", 
       title = "Rainfall intensity by location", 
       subtitle = "November 1983")

仅更改对scale_x_date的调用中的x轴标签:

ggplot(data.m, aes(x = Date, y = value, fill = variable)) +
  geom_col() +
  scale_x_date(name = "Month")

reprex package(v0.2.0)于2018-06-29创建。