我中的R構建scatterplot
具有下列數據:散點圖顏色和圖例基於標籤上的R(plotly)
df <- data.frame(
produto=c('P1','P2','P3','P4','P5','P6','P7','P8','P9','P10')
, categoria=c('A','B','C','A','B','A','B','C','A','C')
, qtd_reviews=runif(10,10,50)
, nota=runif(10,0,5)
, flag_presente=c('Presente', 'Presente', 'Presente','Ausente', 'Ausente', 'MP','MP', 'Ausente', 'Presente', 'MP')
, stringsAsFactors = F
)
然後,創建用於每個類別的一個dataframe
(一個用於「A」 ,'B'和'C'),因爲我想爲每個類別創建一個下拉菜單。
我想爲flag_presente
創造傳奇(「Presente」,「Ausente」,「MP」)有3種顏色,但是當我上添加add_trace()
參數color
和colors
上updatemenus
過濾不起作用。
下面是完整的代碼:
library("plotly")
df <- data.frame(
produto=c('P1','P2','P3','P4','P5','P6','P7','P8','P9','P10')
, categoria=c('A','B','C','A','B','A','B','C','A','C')
, qtd_reviews=runif(10,10,50)
, nota=runif(10,0,5)
, flag_presente=c('Presente', 'Presente', 'Presente','Ausente', 'Ausente', 'MP','MP', 'Ausente', 'Presente', 'MP')
, stringsAsFactors = F
)
unq_categorias <- unique(df$categoria)
for (ctg in unq_categorias) {
assign(
paste0("df_", ctg),
subset(df, categoria==ctg)
)
}
# Retorna o número maximo de reviews
max_rev <- max(df$qtd_reviews) + 1
######
# Gráfico
p <- plot_ly() %>%
add_trace(data = df, y = ~nota, x = ~qtd_reviews, type = 'scatter', mode = 'markers', hoverinfo = 'text',
text = ~paste('Produto: ', produto,
'</br>Categoria: ', categoria,
'</br>Qtd Avaliações: ', round(qtd_reviews, 1),
'</br>Nota Média: ', round(nota, 1))) %>%
add_trace(data = df_A, y = ~nota, x = ~qtd_reviews, type = 'scatter', mode = 'markers', hoverinfo = 'text',
text = ~paste('Produto: ', produto,
'</br>Categoria: ', categoria,
'</br>Qtd Avaliações: ', round(qtd_reviews, 1),
'</br>Nota Média: ', round(nota, 1)),
visible = F) %>%
add_trace(data = df_B, y = ~nota, x = ~qtd_reviews, type = 'scatter', mode = 'markers', hoverinfo = 'text',
text = ~paste('Produto: ', produto,
'</br>Categoria: ', categoria,
'</br>Qtd Avaliações: ', round(qtd_reviews, 1),
'</br>Nota Média: ', round(nota, 1)),
visible = F) %>%
add_trace(data = df_C, y = ~nota, x = ~qtd_reviews, type = 'scatter', mode = 'markers', hoverinfo = 'text',
text = ~paste('Produto: ', produto,
'</br>Categoria: ', categoria,
'</br>Qtd Avaliações: ', round(qtd_reviews, 1),
'</br>Nota Média: ', round(nota, 1)),
visible = F) %>%
layout(
title = 'Título',
# Legend
legend = list(
x = 0.6, y = 1.1,
bordercolor = "#000000",
borderwidth = 1,
orientation = 'h',
font = list(
family = "sans-serif",
size = 12,
color = "#000")
),
# Axes
yaxis = list(
title='Nota Média',
zeroline = T,
rangemode = "tozero",
autorange = F,
range=list(0,5.1)
),
xaxis = list(
title='Quantidade de Avaliações',
zeroline = T,
rangemode = "tozero",
autorange = F,
range=list(0, max_rev)
),
updatemenus = list(
list(
y = 0.8,
buttons = list(
# Todas categorias
list(
method = "restyle",
args = list("visible", list(TRUE, FALSE, FALSE, FALSE)),
label = "Todas"
),
# Categoria A
list(
method = "restyle",
args = list("visible", list(FALSE, TRUE, FALSE, FALSE)),
label = "Categoria A"
),
# Categoria B
list(
method = "restyle",
args = list("visible", list(FALSE, FALSE, TRUE, FALSE)),
label = "Categoria B"
),
# Categoria C
list(
method = "restyle",
args = list("visible", list(FALSE, FALSE, FALSE, TRUE)),
label = "Categoria C"
)
)
)
)
) %>% config(displayModeBar = F)
ggplotly(p)
其在葡萄牙,但它是沒有必要的理解代碼。
任何人都可以幫忙嗎?謝謝
我感到困惑,但這不是我想要的。我希望這個圖例基於'flag_presente'。對不起,如果問題很混亂,我會嘗試編輯以簡化它。 – TheBiro