Самый простой способ - дополнить свой набор данных так, чтобы каждая комбинация присутствовала, даже если она имеет NA
в качестве ее значения. Взяв более простой пример (поскольку у вас много ненужных функций):
dat <- data.frame(a=rep(LETTERS[1:3],3),
b=rep(letters[1:3],each=3),
v=1:9)[-2,]
ggplot(dat, aes(x=a, y=v, colour=b)) +
geom_bar(aes(fill=b), stat="identity", position="dodge")
[/g0]
Это показывает поведение, которое вы пытаетесь избежать: в группы «В», нет группы «а», поэтому полосы шире. Дополнение dat
с фреймворком данных со всеми комбинациями a
и b
:
dat.all <- rbind(dat, cbind(expand.grid(a=levels(dat$a), b=levels(dat$b)), v=NA))
ggplot(dat.all, aes(x=a, y=v, colour=b)) +
geom_bar(aes(fill=b), stat="identity", position="dodge")
[/g1]
Это должно установить IFRAME
высота к высоте ее содержания:
<script type="text/javascript">
the_height = document.getElementById('the_iframe').contentWindow.document.body.scrollHeight;
document.getElementById('the_iframe').height = the_height;
</script>
Можно хотеть добавить scrolling="no"
к Вашему IFRAME
выключить полосы прокрутки.
править: Ой, забыл объявлять the_height
.
Обходное решение не должно использовать <iframe>
и предварительно обработайте код серверной стороны.
Добавление a DOCTYPE
объявление к IFRAME
исходный документ поможет вычислить правильное значение от строки
document.getElementById('the_iframe').contentWindow.document.body.scrollHeight
посмотрите W3C DOCTYPE для примеров
У меня были проблемы и с IE и с FF, поскольку он представлял iframe
документ в режиме 'причуд', пока я не добавил DOCTYPE
.
Поддержка FF/IE/Chrome: .scrollHeight does не работает с Chrome, таким образом, я придумал пример JavaScript с помощью jQuery для установки всех IFRAME
высоты на странице на основе iframes содержания.Примечание: Это для ссылочных страниц в Вашем текущем домене.
<script type="text/javascript">
$(document).ready(function(){
$('iframe').each(function(){
var context = $(this);
context.load(function(event){ // attach the onload event to the iframe
var body = $(this.contentWindow.document).find('body');
if (body.length > 0 && $(body).find('*').length > 0) { // check if iframe has contents
context.height($(body.get(0)).height() + 20);
} else {
context.hide(); // hide iframes with no contents
}
});
});
});
</script>
Этот отрывок CSS должен удалить вертикальную полосу прокрутки:
body {
overflow-x: hidden;
overflow-y: hidden;
}
Я еще не уверен в наличии, оно поднимает столько вертикального пространства, сколько ему нужно, но я буду видеть, не могу ли я понять это.
Также ознакомьтесь с этой веткой: Как DiggBar динамически изменяет высоту своего iframe в зависимости от содержимого, не принадлежащего их домену? .
Он отвечает на тот же вопрос.