У меня есть блестящее приложение, представляющее собой набор диаграмм. На диаграмме 4 показано среднее время, которое я ранее получал здесь с помощью по настройке всплывающих подсказок и меток оси Y для отображения в формате мм:сс по желанию. Однако в более широком контексте приложения обнаружилась некоторая ошибка. Всякий раз, когда размер окна приложения или графика медианного времени (диаграмма 4) изменяется, остальные метки оси Y подвергаются тем же условиям ретрансляции и на графике также пытаются поместить эти метки в формат m:ss. Метки на диаграмме 1 отображаются как мм:сс, хотя это не должно быть, а метки на двух других графиках отображаются как NaN:NaN.
Моя интуиция подсказывает, что исправлением будет измените onRender, чтобы он применялся только к этой конкретной диаграмме по мере необходимости, или, что менее идеально, создайте аналогичные для каждой диаграммы, которые применяются к правильным единицам измерения для этой оси. Проблема в том, что мои навыки работы с HTML ограничены, и мне не удалось отладить onRender, чтобы найти решение.
Ниже показано мое приложение:
library(shiny)
library(tidyverse)
library(plotly)
#---------------------------------------------------------Data
df1 %
layout(
yaxis = list(range = list(0, 1), tickformat = ".0%"),
xaxis = list(title=' ', showticklabels=FALSE),
bargap=0,
legend = list(orientation = 'h',
x = .5, xanchor = "center",
y = -.2, yanchor = "top",
font = list(size = 11))
)
})
output$chart4 %
plot_ly(x = ~group, y = ~median, type = 'bar', name = ~group,
customdata = nfm(df4$median),
hovertemplate = "%{x} %{customdata}",
error_y = list( symmetric= FALSE, arrayminus = ~q1,
array = ~(q3 - median), color = '#000000')
) %>%
layout(yaxis = list(title = 'Median Time'),
xaxis = list(title = '', categoryorder='trace')) %>%
htmlwidgets::onRender(
'function(el, x) {
trfm = function(d){
var mn = Math.floor(d/60);
var sc = (d % 60);
return (sc == 60 ? (mn+1) + ":00" : mn + ":" + (sc < 10 ? "0" : "") + sc)
}
frmtMe = function() {
var here = document.querySelectorAll("g.ytick")
here.forEach(function(it, ind) {
if(!/:/.test(here[ind].firstChild.textContent)) {
here[ind].firstChild.textContent = trfm(here[ind].firstChild.textContent)
}
});
}
frmtMe();
el.on("plotly_relayout", frmtMe);
}')
})
}
shinyApp(ui = ui, server = server)
Подробнее здесь: https://stackoverflow.com/questions/793 ... tsonrender
Ошибка графического ретрансляции из-за пользовательских меток осей из htmlwidgets::onRender() ⇐ Html
Программисты Html
1737129524
Anonymous
У меня есть блестящее приложение, представляющее собой набор диаграмм. На диаграмме 4 показано среднее время, которое я ранее получал здесь с помощью по настройке всплывающих подсказок и меток оси Y для отображения в формате мм:сс по желанию. Однако в более широком контексте приложения обнаружилась некоторая ошибка. Всякий раз, когда размер окна приложения или графика медианного времени (диаграмма 4) изменяется, остальные метки оси Y подвергаются тем же условиям ретрансляции и на графике также пытаются поместить эти метки в формат m:ss. Метки на диаграмме 1 отображаются как мм:сс, хотя это не должно быть, а метки на двух других графиках отображаются как NaN:NaN.
Моя интуиция подсказывает, что исправлением будет измените onRender, чтобы он применялся только к этой конкретной диаграмме по мере необходимости, или, что менее идеально, создайте аналогичные для каждой диаграммы, которые применяются к правильным единицам измерения для этой оси. Проблема в том, что мои навыки работы с HTML ограничены, и мне не удалось отладить onRender, чтобы найти решение.
Ниже показано мое приложение:
library(shiny)
library(tidyverse)
library(plotly)
#---------------------------------------------------------Data
df1 %
layout(
yaxis = list(range = list(0, 1), tickformat = ".0%"),
xaxis = list(title=' ', showticklabels=FALSE),
bargap=0,
legend = list(orientation = 'h',
x = .5, xanchor = "center",
y = -.2, yanchor = "top",
font = list(size = 11))
)
})
output$chart4 %
plot_ly(x = ~group, y = ~median, type = 'bar', name = ~group,
customdata = nfm(df4$median),
hovertemplate = "%{x} %{customdata}",
error_y = list( symmetric= FALSE, arrayminus = ~q1,
array = ~(q3 - median), color = '#000000')
) %>%
layout(yaxis = list(title = 'Median Time'),
xaxis = list(title = '', categoryorder='trace')) %>%
htmlwidgets::onRender(
'function(el, x) {
trfm = function(d){
var mn = Math.floor(d/60);
var sc = (d % 60);
return (sc == 60 ? (mn+1) + ":00" : mn + ":" + (sc < 10 ? "0" : "") + sc)
}
frmtMe = function() {
var here = document.querySelectorAll("g.ytick")
here.forEach(function(it, ind) {
if(!/:/.test(here[ind].firstChild.textContent)) {
here[ind].firstChild.textContent = trfm(here[ind].firstChild.textContent)
}
});
}
frmtMe();
el.on("plotly_relayout", frmtMe);
}')
})
}
shinyApp(ui = ui, server = server)
Подробнее здесь: [url]https://stackoverflow.com/questions/79365293/plotly-relayout-bug-due-to-custom-axis-labels-from-htmlwidgetsonrender[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия