在 R 中绘制键盘布局

Plot keyboard layout in R

我正在创建一个带有自定义键盘快捷键的 Shiny 应用程序(例如,如果有人按 s,将提交一些数据)。为此,我发现在 R 中生成 "plot" 键盘布局以将键映射到它们的快捷功能并在应用程序中显示非常有用。

这些是一些虚拟快捷方式:

actions <- c("back", "next", "update", "submit") 
keys <- c(",", ".", "u", "s")
keycode <- c(188,190,85,83)
data.frame(actions, keys, keycode)

# actions  keys keycode
# back      ,     188
# next      .     190
# update    u      85
# submit    s      83

我想要这样的东西:

但我想选择在每个键中显示的内容。我能找到的唯一远程 similar question 不是很有帮助。我想知道这是否可以绘制成地图,也许吧?

一种非常天真的方法是使用 geom_rect() 简单地绘制键盘。 第一步是创建每条线,我是分开做的,因为这样很容易不会迷路。 将任何键更改为另一个值非常简单,因为它们很容易在每个数据帧中查明。

library(ggplot2)
#1st line from top
df1=data.frame(xmin=c(0,1,2,3,4,5,6,7,8,9,10,11,12,13),
              xmax=c(1,2,3,4,5,6,7,8,9,10,11,12,13,15),
              ymin=rep(4,14),
              ymax=rep(5,14),
              value=c("'","1","2","3","4","5","6","7","8","9","0","-","=","backspace"))
#2nd line from top
df2=data.frame(xmin=c(0,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5),
               xmax=c(1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,15),
               ymin=rep(3,14),
               ymax=rep(4,14),
               value=c("tab","Q","W","E","R","T","Y","U","I","O","P","[","]","enter"))
#3rd line from top
df3=data.frame(xmin=c(0,1.75,2.75,3.75,4.75,5.75,6.75,7.75,8.75,9.75,10.75,11.75,12.75,13.75),
               xmax=c(1.75,2.75,3.75,4.75,5.75,6.75,7.75,8.75,9.75,10.75,11.75,12.75,13.75,15),
               ymin=rep(2,14),
               ymax=rep(3,14),
               value=c("caps","A","S","D","F","G","H","J","K","L",":","@","~","enter"))
#4th line from top
df4=data.frame(xmin=c(0,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5),
               xmax=c(1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,15),
               ymin=rep(1,13),
               ymax=rep(2,13),
               value=c("shiftr","|","Z","X","C","V","B","N","M","<",">","?","shiftr"))
#5th line from top
df5=data.frame(xmin=c(0,1.5,2.5,4,10,11.5,12.5,13.5),
               xmax=c(1.5,2.5,4,10,11.5,12.5,13.5,15),
               ymin=rep(0,8),
               ymax=rep(1,8),
               value=c("ctrll","winl","altl","space","altgr","winr","menu","ctrlr"))

#putting it together
df=rbind(df1,df2,df3,df4,df5)

ggplot(df,aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax))+
  geom_rect(colour="black")+geom_text(aes(x=(xmin+xmax)/2,y=(ymin+ymax)/2,label=value))+
  theme_void()

注意:这远非完美(“回车”键分为 2 个),但这可能会给您一些想法或工作基础。