我正在学习 shiny 应用程序并有关于修改布局(特别是样式和字体)的基本问题。希望能得到指引或明确的答案,谢谢!
考虑一个基本的输入-输出应用程序:用户在 sidebarPanel 中输入数据,它会反应性地在 mainPanel 中输出结果。
如何使 mainPanel 中的输出表格看起来更像 sidebarPanel?比如说一个大约相同大小的带有彩色背景(可能是另一种颜色)的矩形,并且数据出现在一个类似大小的框中。
如何控制面板内字体类型、字体大小和字号?
从代码中可以看出(参见下面几行 runGist 的细节),我已经成功地定制了 sidebarPanel 中 numericInput 框的大小,但我无法控制字体样式(我的 tag$style 代码是否放错位置了?)。
重要的是出于美观目的,我想知道如何格式化 mainPanel 以使其看起来像 sidebarPanel。大部分是从 shiny 网站的示例进行修改,但我显然错过了一些重要的东西。
编辑1:根据 Scott Chamberlain 的建议,我已经在 github 上复制了 server.R 和 ui.R 文件:
library("shiny")
runGist("gist.github.com/annoporci/7313856")
编辑2:Scott建议使用Chrome/Firefox的“检查元素”功能(在html页面的主体上右键单击,其他浏览器可能具有相同的功能)。下面是一张屏幕截图:
检查元素
使用“检查元素”工具是非常有益的,正如Scott所建议的。
以下是我学到的内容(如果我没有弄错的话):
container-fluid
和row-fluid
控制整个容器。span12
控制headerPanel
span4
控制sidebarPanel
span8
控制mainPanel
shiny-bound-input
用于输入端shiny-bound-output
和shiny-html-output
(两者都似乎有效)用于输出端
根据这些发现,我将HTML样式放置在mainPanel中,因为它似乎是一个明显的地方,但也可以在sidebarPanel内部工作。对我来说更直观的做法是将其直接放在pageWithSidebar()内部,但那样不起作用。
下面是编辑后的shiny代码:
runGist("https://gist.github.com/annoporci/7346772")
这里是HTML样式:
HTML('<style type="text/css">
.row-fluid { width: 50%; }
.well { background-color: #99CCFF; }
.shiny-html-output { font-size: 20px; line-height: 21px; }
</style>')
为了保持容器较小,我将总体容器宽度设为50%。
侧边栏和主面板我选择了相同的颜色。
输出框中我选择了更大的字体,虽然在这里看起来不太美观,但在我的实际应用程序中是有意义的。此外,我只是在尝试一些东西。
我选择了一个行高为21px而不是默认的20px,只是为了微调输出框的高度与输入框相同。同样,这是一个实验。
我还在server.R中改变了显示样式,具体来说
output$myResults <- renderText({
r <- myFunction(input$myinput)
c("My Output:","<br><br>",r)
})
这是因为我想让结果显示在“我的输出”下面的文字之下。通过尝试和错误,我发现可以使用向量()中的字符串,并使用<br><br>作为分隔符来强制进行换行。 如果您知道正确的方法,请参与并提供建议,否则我会感到震惊,因为这可能不是推荐的方法。
次要跟进问题:
我将查看是否可以找到一种方法,使我的输出结果出现在类似于侧边栏面板中输入数字的白色框中。 欢迎任何建议。
是否有可能将所有HTML修改收集到同一个单独的文件中,与server.R和ui.R一起存储?
我会选择Scott的答案,因为他已经帮助我发现了足够的东西,以使我的输出接近我想要的方式。 但是,如果您在上述描述中看到错误或不准确之处,请编辑。