R:在图形上叠加点 [英] R: Overlaying Points on a Graph
问题描述
我正在使用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屋!