代码之家  ›  专栏  ›  技术社区  ›  aaron

修改ggplot2中的字体

  •  56
  • aaron  · 技术社区  · 14 年前

    我正在寻找一种方法来修改ggplot中的字体类型。目前,我很乐意将字体简单地更改为“Courier”字体系列,但最终我的目标是调用一个自定义字体模板——对于后一点的任何输入都将非常感谢。

    我做了一些家庭作业,看了下面的文章和文章:

    这可能是因为我对ggplot2仍然是一个毫无希望的业余爱好者,但我甚至还没有能够将图表字体切换到Courier。有什么帮助吗?我已经包含了相关图表的数据,下面,以及代码,所以希望这一切都很容易理解。

    7 回复  |  直到 7 年前
        1
  •  29
  •   Steve Powell    11 年前

    我认为你的回答很好,但你可以更简单地回答:

    install.packages("extrafont");library(extrafont)
    font_import("Trebuchet MS")
    library(ggplot2)
    qplot(1:10)+theme(text=element_text(family="Trebuchet MS"))
    
        2
  •  25
  •   aaron    14 年前

    以最少的麻烦解决了我的问题。这是一个两步走的解决方案,如果没有听从回应的成员的建议,我是不会想到的。

    为了更改ggplot文本的默认值,我修改了brandon在以下位置引用的代码:

    http://johndunavent.com/combined-line-and-bar-chart-ggplot2

    其中,John Dunavent创建了一个函数Theme_Min,可以对其进行编辑,以提供ggplot的默认选项,包括使用从Windows中导入的字体和windows fonts命令。我对他的代码的修改如下:

    theme_min = function (size=10, font=NA, face='plain', 
        panelColor=backgroundColor, axisColor='#999999', 
        gridColor=gridLinesColor, textColor='black') 
    {
        theme_text = function(...)
            ggplot2::theme_text(family=font, face=face, colour=textColor, 
                size=size, ...)
    
    opts(
        axis.text.x = theme_text(),
        axis.text.y = theme_text(),
        axis.line = theme_blank(),
        axis.ticks = theme_segment(colour=axisColor, size=0.25),
        panel.border = theme_rect(colour=backgroundColor),
        legend.background = theme_blank(),
        legend.key = theme_blank(),
        legend.key.size = unit(1.5, 'lines'),
        legend.text = theme_text(hjust=0),
        legend.title = theme_text(hjust=0),
        panel.background = theme_rect(fill=panelColor, colour=NA),
        panel.grid.major = theme_line(colour=gridColor, size=0.33),
        panel.grid.minor = theme_blank(),
        strip.background = theme_rect(fill=NA, colour=NA),
        strip.text.x = theme_text(hjust=0),
        strip.text.y = theme_text(angle=-90),
        plot.title = theme_text(hjust=0),
        plot.margin = unit(c(0.1, 0.1, 0.1, 0.1), 'lines'))
    }
    
    ##Create a custom font type. Could be 'F', 'TEST', whatever
    windowsFonts(F = windowsFont('Wide Latin'))
    
    ##and insert this line of code into the original code I list above: 
    + theme_min(font='F', size=10) 
    

    令人尴尬的是,在创建绘图之前,无法(我发现)对geom_文本对象的字体设置进行常规修改。尽管如此,詹姆斯的上述解决方案还是非常有效。我没有使用标准字体,而是将fontfamily=“f”设置为引入在theme_min()中选择的自定义字体,即:

    grid.gedit("GRID.text",gp=gpar(fontfamily="F"))
    

    希望这对其他想要修改图形字体的用户有用。

    为所有帮助我解决这个问题的人干杯! 亚伦

        3
  •  11
  •   Thierry    14 年前

    看一看主题主题为“文本”()

    dummy <- data.frame(A = rnorm(10), B = rnorm(10))
    ggplot(dummy, aes(x = A, y = B)) + geom_point()
    #helvetica = default
    ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "sans", face = "bold"))
    #times
    ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "serif", face = "bold"))
    #courier 
    ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "mono", face = "bold"))
    
        4
  •  4
  •   Community Ian Goodfellow    7 年前

    灵感来自 a post kohske 我想到的博客是:

    theme_set( theme_bw( base_family= "serif"))
    
    theme_update( panel.grid.minor= theme_blank(),
                 panel.grid.major= theme_blank(),
                 panel.background= theme_blank(),
                 axis.title.x= theme_blank(),
                 axis.text.x= theme_text( family= "serif",
                   angle= 90, hjust= 1 ),
                 axis.text.x= theme_text( family= "serif"),
                 axis.title.y= theme_blank())
    
    theme_map <- theme_get()
    
    theme_set( theme_bw())
    

    现在,当我想使用那个特定的主题时:

    last_plot() + theme_map
    

    小精灵。

    顺便说一句,如果我有权力,我会投票否决首选答案:

    > grid.gedit("GRID.text",gp=gpar(fontfamily="mono"))
    Error in editDLfromGPath(gPath, specs, strict, grep, global, redraw) :
      'gPath' (GRID.text) not found
    

    不知道这意味着什么。我也没有提供一个链接来评论这个答案;也许网站上发生了一些变化。

        5
  •  2
  •   James    14 年前

    您可以设置由 geom_text 具有 grid.gedit :

    grid.gedit("GRID.text",gp=gpar(fontfamily="mono"))
    

    在你制作出你最初的剧情之后再这样叫。

        6
  •  0
  •   Jeff    14 年前

    也可以查看cairo包,该包支持使用您选择的字体完全切换所有字体。 http://rforge.net/doc/packages/Cairo/00Index.html

        7
  •  0
  •   tim    7 年前

    对于我的钱来说,这似乎是最简单的解决方案。

    有些人在df中播放数据,并制作成一个简单的图形“p”,带有漂亮的长x和y标签,因此我们可以看到字体的变化:

    df <- data.frame(A = rnorm(10), B = rnorm(10))
    p = ggplot(data = df, aes(x = A, y = B)) + geom_point()
    p = p + xlab("A long x-string so we can see the effect of the font switch")
    p = p + ylab("Likewise up the ordinate")
    

    我们以任何字体查看默认绘图:

    p 
    

    现在我们切换到optima,添加一些不错的标题和副标题来享受optima的荣耀:

    label = "Now we switch to Optima"
    subtitle = "Optima is a nice font: https://en.wikipedia.org/wiki/Optima#Usages"
    

    在这之后,我们用新字体打印

    # the only line you need to read:
    p + theme(text = element_text(family = "Optima", , face = "bold"))
    p = p + ggtitle(label = label, subtitle = subtitle)
    p
    

    graph in optima font