我已经大量搜索了我想要完成的任务,但我还没有遇到我特别想要的示例或情节,所以我正在接触社区。
我拥有的内容(可下载数据here):
时间序列数据(每个记录相隔2小时,跨越近一年),具有相关的海拔和财产所有权。
library(ggplot2)
data <- read.csv("dataex.csv")
data$timestamp <-as.POSIXct(as.character(data$timestamp),format="%m/%d/%Y %H:%M", tz="GMT")
我想要什么(通过ggplot):
线条或条形图显示按所有权着色的每个数据记录的时间(x轴)的高程(y轴)(对于线图,填充线下的区域,或条形图,填写酒吧)。我已经尝试了geom_line
,geom_bar
和geom_area
的迭代(距离我最近的地方w geom_bar
)。我希望至少有以下一个选项能够实现!
选项A - 我最接近实现此目的(每个数据记录的绘图)使用以下代码:
ggplot(data, aes(x=timestamp, y=elev, fill=OWNER)) + geom_bar(stat="identity")
但是,我希望这些酒吧相互接触,但如果我调整width
中的geom_bar()
,一切都会消失。 (另外,如果我在其他批次的类似数据上运行上述代码,它只会显示一小部分条形图,可能是因为它们有更多的数据记录)。看起来它的数据太多了。所以我尝试了另一条路线......
选项B - 按天计划,结果显示信息更丰富,每天都显示所有权的可变性。
ggplot(data, aes(x=as.Date(Date, format='%Y-%m-%d'), y=elev, fill=OWNER)) + geom_bar(stat="identity", width=1)
但是,这会将y轴相加,因此高程不可解释。我可以将y轴除以12(每天的典型记录数),但偶尔会有少于12个记录的天数,这会导致y轴不正确。是否有一种功能或方法将y轴除以图中表示的每日记录数量?或者有人建议更好的解决方案吗?
答案 0 :(得分:0)
类似的东西:
library(readr)
library(dplyr)
library(ggplot2)
library(ggalt)
readr::read_csv("~/Desktop/dataex.csv") %>%
mutate(timestamp=lubridate::mdy_hm(timestamp)) %>%
select(timestamp, elev, Owner=OWNER) -> df
ggplot(df, aes(timestamp, elev, group=Owner, color=Owner)) +
geom_segment(aes(xend=timestamp, yend=0), size=0.1) +
scale_x_datetime(expand=c(0,0), date_breaks="2 months") +
scale_y_continuous(expand=c(0,0), limits=c(0,2250), label=scales::comma) +
ggthemes::scale_color_tableau() +
hrbrmisc::theme_hrbrmstr(grid="Y") +
labs(x=NULL, y="Elevation") +
theme(legend.position="bottom") +
theme(axis.title.y=element_text(angle=0, margin=margin(r=-20)))