знак процента в легенде гистограммы с использованием графически блестящего

Я использую пакет plotly в R-Shiny для построения гистограммы. Проблема в том, что знак процента не отображается в  legend .

Легенда должна быть создана с помощью следующего фрагмента кода:

data1<- data[,list('MW (%)'=sum(as.numeric(Markw))/mw.g),by=Best]
data2<- data[,list('EL (%)'=sum(as.numeric(`EL absolut`))/EL.g),by=Best]
data3<- data[,list('VaR (%)'=sum(`VaR absolut`)/Var.g),by=Best]
.
.
.

Я не нашел ни одной опции для отображения (%) в легенде . Я пробовал даже символ Юникода%, но безуспешно. Есть идеи, каким может быть решение?

Весь код действительно большой, и доза не очень помогает найти решение, если одна доза уже не знает ответа. Каждый может построить минимальный пример, в котором один столбец назван: «MW (%)» Однако часть графика в server.R

 output$plot <- renderPlotly({
    d.plot<-data.frame(dataset())
    # make traces:
    x<- d.plot[,1]
    y1<- d.plot[,2]*100
    y2<- d.plot[,3]*100
    y3<- d.plot[,4]*100

  #make the plot data frame:
    pl.d<- data.frame(x,y1,y2,y3)
  #define the margin
    m <- list(
      b = 200
      #autoexpand = TRUE
    )
  #plot
    plot_ly(pl.d, x = ~x, y = ~y1, type = 'bar', name = colnames(d.plot)[2], marker = list(color = "#26478A"),
            height=800) %>%
      add_trace(y = ~y2, name = colnames(d.plot)[3], marker = list(color = "#FF6600")) %>%
      add_trace(y = ~y3, name = colnames(d.plot)[4], marker = list(color = "#7E182F")) %>%
      layout("title" = colnames(d.plot)[1],
             xaxis = list(title = "", tickangle = 65,tickfont  = list(family= "Arial",size = 14),
                          margin = m
                          ), 
             yaxis = list(title = "",ticksuffix = "%"),
             barmode = 'group'
             #margin = m
             ) 
})

person maniA    schedule 19.12.2018    source источник
comment
Не могли бы вы предоставить полный код?   -  person Stéphane Laurent    schedule 19.12.2018
comment
Пожалуйста, используйте тег r-plotly вместо plotly.   -  person ismirsehregal    schedule 19.12.2018


Ответы (2)


Вам нужно будет проверить, что передано в аргумент name plot_ly и add_trace:

library(plotly)

Animals <- c("giraffes", "orangutans", "monkeys")
SF_Zoo <- c(20, 14, 23)
LA_Zoo <- c(12, 18, 29)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)

p <- plot_ly(data, x = ~Animals, y = ~SF_Zoo, type = 'bar', name = 'MW (%)') %>%
  add_trace(y = ~LA_Zoo, name = 'EL (%)') %>%
  layout(yaxis = list(title = 'Count'), barmode = 'group')

p

введите здесь описание изображения

пример источника

Изменить: В приведенном выше примере я хотел указать, что это не имеет ничего общего с plotly. Причина описываемого вами поведения заключается в том, что функция data.frame() по умолчанию использует функцию make.names() для проверки синтаксически допустимых имен. Вы можете отключить эту опцию, установив check.names=FALSE в своем вызове на data.frame().

См. Следующее:

df1 <- data.frame('MW (%)' = 1:10)
print(names(df1))
# [1] "MW...."

df2 <- data.frame('MW (%)' = 1:10, check.names=FALSE)
print(names(df2))
# [1] "MW (%)"

Надеюсь, это помогло прояснить ситуацию.

person ismirsehregal    schedule 19.12.2018
comment
большое спасибо. Ваш ответ побудил меня найти решение, но не причину! - person maniA; 20.12.2018

на самом деле я действительно не менял код. Из-за вышеприведенного ответа я понял, что проблема заключается в

d.plot<-data.frame(dataset())

Я изменил только для примера

name = colnames(d.plot)[2]

в

name = colnames(dataset())[2],

где dataset() - это data.table.

Другими словами, data.frame заменяется на data.table

person maniA    schedule 20.12.2018