【问题标题】:Custom ggplot output (colour, appearence, etc)自定义 ggplot 输出(颜色、外观等)
【发布时间】:2011-08-12 18:52:30
【问题描述】:

我对ggplot2很陌生,如果这篇文章太愚蠢,请原谅我。 我使用以下代码绘制数据,但无法获得发布所需的样式。

在输出中,我需要:

  1. 一个传奇。在我的数据案例中,opts(legend.position="top") 之后什么都没有,我不知道为什么。而且我还想将图例拆分为 3 列,例如 columns=3 in auto.key of lattice

  2. 使用灰色系统(例如,fill=c("white","grey20","grey70"))根据因子 pl 对条形进行着色,但似乎我无法使用 scale_colour_manual 更改样式

  3. 将 x 轴上的标签转为水平。

  4. 可能是 y 轴?但是,你觉得有必要吗?

顺便说一句,我不知道如何准备出版图,所以,非常欢迎任何建议!

library(ggplot2)
wt<-gl(3,4,108,labels=c("W30","W60","W90"))
pl<-gl(3,12,108,labels=c("P0","P1","P2"))
gp<-gl(3,36,108,labels=c("A","B","C"))
dat<-cbind(A=runif(108),B=runif(108,min=1,max=10),C=runif(108,min=100,max=200),D=runif(108,min=1000,max=1500))
dat.df<-data.frame(wt,pl,gp,dat)
dat.m<-melt(dat.df)
ggplot(dat.m,aes(x=wt,y=value,group=pl,facet=gp,fill=pl))+
        stat_summary(fun.y=mean,geom="bar",size=2,position="dodge")+
        stat_summary(fun.ymin=function(x)(mean(x)-sd(x)/sqrt(length(x))),geom="errorbar",
                    fun.ymax=function(x)(mean(x)+sd(x)/sqrt(length(x))),position="dodge")+
                    facet_grid(variable~facet,scale="free_y")+ opts(legend.position="top")+ 
                    scale_colour_manual(values = c("red", "blue", "green")) 

【问题讨论】:

    标签: r colors ggplot2 legend


    【解决方案1】:

    这里有一些提示:

    1. 要获取水平图例,请使用opts(legend.direction="horizontal")

    2. 要更改条的填充,您必须指定scale_fill_manual(values=c("white", "grey20", "grey70"))。在您的示例中,您已将填充正确映射到 pl。唯一缺少的步骤是将手动比例映射为填充,而不是颜色。颜色一般是指条的轮廓,填充是指条的内部。

    3. 要旋转轴文本的角度,请使用opts(axis.text.x = theme_text(angle=45))。默认方向是水平的,所以我用 45 度来说明。

    4. 我不知道您所说的“可能是 y 轴”是什么意思。也许您不想显示 y 轴,在这种情况下您可以通过 opts(axis.title.y = theme_blank())

    5. 将其隐藏

    请注意,您的示例不可重现,因此我不得不发明一些数据。如果您确保您的示例可重现,您可以让我们更轻松地做出回应:

    • year 没有数据
    • 在您的 data.frame 中有对 trt 的引用
    • 您为grp 设置了数据,但随后将其称为gp

    我的代码:

    dat.df <- data.frame(
        gp = gl(3, 36, 108, labels=c("A", "B", "C")),
        yr = sample(2000:2010, 108, replace=TRUE),
        A=runif(108),
        B=runif(108, min=1, max=10),
        C=runif(108, min=100, max=200),
        D=runif(108, min=1000, max=1500)
    )
    dat.m <- melt(dat.df)
    
    ggplot(dat.m, aes(x=wt, y=value, group=pl, facet=gp, fill=pl))+
        stat_summary(fun.y=mean, geom="bar", size=2, position="dodge")+
        stat_summary(fun.ymin=function(x)(mean(x)-sd(x)/sqrt(length(x))), geom="errorbar", 
            fun.ymax=function(x)(mean(x)+sd(x)/sqrt(length(x))), position="dodge")+#, position="dodge"
        facet_grid(variable~facet, scale="free_y")+
        scale_fill_manual(values=c("white", "grey20", "grey70")) +
        opts(
            legend.position="top", 
            legend.direction="horizontal",
            axis.text.x = theme_text(angle=45),
            axis.title.y = theme_blank()
        ) 
    

    【讨论】:

    • 感谢@Andrie,我为粗心道歉!我已经编辑了代码以使其可重现。你的答案正是我想要的!
    • 我是 R 新手,但我认为 ggplot 发生了变化,例如,这是新语法:theme(axis.text.x = element_text(angle =45))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2021-07-16
    • 2019-07-26
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多