Пользовательский вывод ggplot (цвет, внешний вид и т. Д.) - PullRequest
1 голос
/ 26 апреля 2011

Я новичок в ggplot2, так что простите, если этот пост слишком глупый.Я использовал следующий код для построения графика данных, но не смог получить стиль, который мне нужен для публикации.

В выводе мне нужно:

  1. легенда.В моем случае с данными после opts(legend.position="top") ничего нет. Понятия не имею почему.И я также хотел бы разбить легенду на 3 столбца, например columns=3 в auto.key решетки

  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")) 

My output

1 Ответ

6 голосов
/ 26 апреля 2011

Вот несколько указателей:

  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())

Обратите внимание, что ваш пример не воспроизводим, поэтому мне пришлось придумать некоторые данные. Вы можете упростить нам ответ, если убедитесь, что ваш пример воспроизводим:

  • Нет данных для year
  • В вашем data.frame
  • Вы настроили данные для 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()
    ) 

enter image description here

...