2014-10-07 5 views
3

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

mat <- read.csv("trial.csv",sep = ",", header=T, row.names=1) 
vec <- as.vector(as.matrix(mat)) 
varieties = names(mat) 
matVar = matrix(vec, ncol = length(varieties), nrow = length(attr(mat, "row.names"))) 
library(ggplot2) 
require(reshape2) 
library(grid) 
require(grid) 
mat$id <- rownames(mat) 
gg <- melt(mat) 
#mat$id <- reorder(mat$id) 
#gg$id<-factor(gg$id) 
gg$id <- as.character(gg$id) 
gg$id <- factor(gg$id, levels=rev(unique(gg$id))) 
ggplot(gg, aes(y=variable,x=id))+ 
    geom_tile(aes(fill=value))+ 
    scale_fill_gradient(low="red",high="white")+ 
    geom_text(aes(label=value), data=cbind(aggregate(value~variable, gg, sum), id="total")) + 
    geom_text(aes(label=value),data=cbind(aggregate(value~id, gg, sum), variable="total")) + 
    theme(axis.text.x = element_blank())+ 
    scale_y_discrete(limits=c(levels(gg$variable), "total"))+ 
    scale_x_discrete(limits=c(levels(gg$id), "total"))+ 
    coord_flip()+labs(y = "Patients", x= "Genes") 

Вот пример данных, но мой фактический набор данных действительно огромен.

h1, h2, h3, h4, h5, h6, h7, h8, h9 
a, 1, 1, 1, 0, 1, 1, 0, 1 
b, 0, 1, 1, 1, 0, 0, 0, 0 
c, 1, 0, 0, 1, 1, 1, 1, 1 
d, 1, 0, 1, 0, 0, 0, 1, 0 
e, 1, 0, 0, 0, 0, 1, 0, 0 
f, 1, 1, 0, 0, 0, 0, 0, 0 
g, 0, 0, 0, 0, 0, 0, 0, 0 
h, 0, 0, 0, 0, 0, 1, 1, 0 

Это выход enter image description here

ответ

1

Попробуйте указать размеры вашего графического устройства, например,

pdf(file="plot.pdf",width=11,height=8) 

PDF использует размеры приведены в дюймах, в то время как PNG в пикселях, так что вы также, возможно, потребуется указать разрешение, например,

png(file="animals45.png",width=400,height=350,res=45) 

для получения дополнительной информации см:

1

Вот один из способов, хотя это немного рубить. Поскольку вы используете факторы, и вы отключили горизонтальную ось, вы можете добавить дополнительные метки в scale_y_discrete(...).

ggplot(gg, aes(y=variable,x=id))+ 
    geom_tile(aes(fill=value))+ 
    scale_fill_gradient(low="red",high="white")+ 
    geom_text(aes(label=value), data=cbind(aggregate(value~variable, gg, sum), id="total")) + 
    geom_text(aes(label=123456789*value),data=cbind(aggregate(value~id, gg, sum), variable="total"),hjust=0) + 
    theme(axis.text.x = element_blank())+ 
    scale_y_discrete(limits=c(levels(gg$variable), "total","",""))+ 
    scale_x_discrete(limits=c(levels(gg$id), "total"))+ 
    coord_flip()+labs(y = "Patients", x= "Genes") 

+0

Спасибо за ваш ответ. Мой вопрос был не ясен. Прости. Я мог бы правильно выбрать номера справа. Однако у меня проблемы с верхними номерами. Это может быть из-за очень тонких линий в сюжете, которые я не могу исправить. Я бы очень признателен, если бы вы могли мне помочь. – abn

Смежные вопросы