R:在图形上叠加点 [英] R: Overlaying Points on a Graph

查看:40
本文介绍了R:在图形上叠加点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用R编程语言.我正在尝试学习如何在图形上叠加点,然后将其可视化.

I am using the R programming language. I am trying to learn how to overlay points on a graph and then visualize them.

使用以下代码,我可以生成一些时间序列数据,按月汇总,取平均值/最小值/最大值,并绘制下图:

Using the following code, I can generate some time series data, aggregate them by month, taking the average/min/max, and plot the following graph:

library(xts)
library(ggplot2)
library(dplyr)
library(plotly)
library(lubridate)

set.seed(123)

#time series 1
date_decision_made = seq(as.Date("2014/1/1"), as.Date("2016/1/1"),by="day")

property_damages_in_dollars <- rnorm(731,100,10)

final_data <- data.frame(date_decision_made, property_damages_in_dollars)


#####aggregate

final_data$year_month <- format(as.Date(final_data$date_decision_made), "%Y-%m")
final_data$year_month <- as.factor(final_data$year_month)


f = final_data %>% group_by (year_month) %>% summarise(max_value = max(property_damages_in_dollars), mean_value = mean(property_damages_in_dollars), min_value = min(property_damages_in_dollars))



####plot####

fig <- plot_ly(f, x = ~year_month, y = ~max_value, type = 'scatter', mode = 'lines',
        line = list(color = 'transparent'),
        showlegend = FALSE, name = 'max_value') 

fig <- fig %>% add_trace(y = ~min_value, type = 'scatter', mode = 'lines',
            fill = 'tonexty', fillcolor='rgba(0,100,80,0.2)', line = list(color = 'transparent'),
            showlegend = FALSE, name = 'min_value') 

fig <- fig %>% add_trace(x = ~year_month, y = ~mean_value, type = 'scatter', mode = 'lines',
            line = list(color='rgb(0,100,80)'),
            name = 'Average') 


fig <- fig %>% layout(title = "Average Property Damages",
         paper_bgcolor='rgb(255,255,255)', plot_bgcolor='rgb(229,229,229)',
         xaxis = list(title = "Months",
                      gridcolor = 'rgb(255,255,255)',
                      showgrid = TRUE,
                      showline = FALSE,
                      showticklabels = TRUE,
                      tickcolor = 'rgb(127,127,127)',
                      ticks = 'outside',
                      zeroline = FALSE),
         yaxis = list(title = "Dollars",
                      gridcolor = 'rgb(255,255,255)',
                      showgrid = TRUE,
                      showline = FALSE,
                      showticklabels = TRUE,
                      tickcolor = 'rgb(127,127,127)',
                      ticks = 'outside',
                      zeroline = FALSE))

fig

现在(在同一图"fig"上),我试图以垂直方式绘制该月的所有观测值.我正在尝试创建类似这样的东西:

Now (on the same plot "fig"), for each month, I am trying to plot all the observations for that month in a vertical fashion. I am trying to create something like this:

通过一些数据操作,下面的代码可以生成以下图形: plot(final_data $ year_month,final_data $ property_damages_in_dollars)

With a bit of data manipulation, the following code can produce the graph below : plot( final_data$year_month, final_data$property_damages_in_dollars)

有人可以告诉我如何扩展此解决方案以绘制图(即增强图"对象)吗?

Can someone please show me how to extend this solution for a plotly diagram (i.e. enhance the "fig" object)?

谢谢

推荐答案

要完全灵活地设置标记格式,可以对数据框 final_data 使用 add_trace code>在代码中添加以下内容:

To have full flexibilty with regards to formatting your markers, you can use add_trace with subsets of your dataframe final_data using the following addition to your code:

date_split <- split(final_data, final_data$year_month)
for (i in 1:length(date_split)) {
  fig <- fig %>% add_trace(y=date_split[[i]]$property_damages_in_dollars,
                           x=date_split[[i]]$year_month,
                           mode='markers'
                           )
}

结果1:

如果只想使用黑色标记,可以将以下内容添加到 add_trace():

If you'd like only black markers you can add the following to add_trace():

marker=list(color='rgba(0,0,0, 1)'

结果2:

如果您想调整绘图的透明度,则可以直接通过 rgba()中的最后一个参数进行操作,例如:

And if you'd like to adjust the transparency of your plots you can do so directly throug tha last argument in rgba(), for example:

marker=list(color='rgba(0,0,0, 0.2)')

结果3:

library(xts)
library(ggplot2)
library(dplyr)
library(plotly)
library(lubridate)

set.seed(123)

#time series 1
date_decision_made = seq(as.Date("2014/1/1"), as.Date("2016/1/1"),by="day")

property_damages_in_dollars <- rnorm(731,100,10)

final_data <- data.frame(date_decision_made, property_damages_in_dollars)


#####aggregate

final_data$year_month <- format(as.Date(final_data$date_decision_made), "%Y-%m")
final_data$year_month <- as.factor(final_data$year_month)


f = final_data %>% group_by (year_month) %>% summarise(max_value = max(property_damages_in_dollars), mean_value = mean(property_damages_in_dollars), min_value = min(property_damages_in_dollars))



####plot####

fig <- plot_ly(f, x = ~year_month, y = ~max_value, type = 'scatter', mode = 'lines',
        line = list(color = 'transparent'),
        showlegend = FALSE, name = 'max_value') 

fig <- fig %>% add_trace(y = ~min_value, type = 'scatter', mode = 'lines',
            fill = 'tonexty', fillcolor='rgba(0,100,80,0.2)', line = list(color = 'transparent'),
            showlegend = FALSE, name = 'min_value') 

fig <- fig %>% add_trace(x = ~year_month, y = ~mean_value, type = 'scatter', mode = 'lines',
            line = list(color='rgb(0,100,80)'),
            name = 'Average') 


fig <- fig %>% layout(title = "Average Property Damages",
         paper_bgcolor='rgb(255,255,255)', plot_bgcolor='rgb(229,229,229)',
         xaxis = list(title = "Months",
                      gridcolor = 'rgb(255,255,255)',
                      showgrid = TRUE,
                      showline = FALSE,
                      showticklabels = TRUE,
                      tickcolor = 'rgb(127,127,127)',
                      ticks = 'outside',
                      zeroline = FALSE),
         yaxis = list(title = "Dollars",
                      gridcolor = 'rgb(255,255,255)',
                      showgrid = TRUE,
                      showline = FALSE,
                      showticklabels = TRUE,
                      tickcolor = 'rgb(127,127,127)',
                      ticks = 'outside',
                      zeroline = FALSE))

date_split <- split(final_data, final_data$year_month)
for (i in 1:length(date_split)) {
  fig <- fig %>% add_trace(y=date_split[[i]]$property_damages_in_dollars,
                           x=date_split[[i]]$year_month,
                           mode='markers',
                           marker=list(color='rgba(0,0,0, 0.2)')
                           #marker=list(color='rgba(0,0,0, 1)')
                           )
}
fig

这篇关于R:在图形上叠加点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆