diff --git a/goffice/canvas/goc-graph.c b/goffice/canvas/goc-graph.c
index 3560c32..c93e04d 100644
--- a/goffice/canvas/goc-graph.c
+++ b/goffice/canvas/goc-graph.c
@@ -219,7 +219,9 @@ goc_graph_update_bounds (GocItem *item)
 	item->y0 = graph->y;
 	item->x1 = graph->x + graph->w;
 	item->y1 = graph->y + graph->h;
-	gog_renderer_update (graph->renderer, graph->w, graph->h);
+	gog_renderer_update (graph->renderer, 
+				      (int) (graph->w * item->canvas->pixels_per_unit),
+				      (int) (graph->h * item->canvas->pixels_per_unit));
 }
 
 static char *
diff --git a/goffice/graph/gog-renderer.c b/goffice/graph/gog-renderer.c
index 36670ae..f8033af 100644
--- a/goffice/graph/gog-renderer.c
+++ b/goffice/graph/gog-renderer.c
@@ -1029,11 +1029,12 @@ gog_renderer_update (GogRenderer *rend, double w, double h)
 
 	rend->cairo = cairo_create (rend->cairo_surface);
 
-	if (size_changed) {
-		rend->scale_x = (graph->width >= 1.) ? (rend->w / graph->width) : 1.;
-		rend->scale_y = (graph->height >= 1.) ? (rend->h / graph->height) : 1.;
-		rend->scale = MIN (rend->scale_x, rend->scale_y);
+	/* we need to update scale even if size did not change since graph size might have changed (#599887) */
+	rend->scale_x = (graph->width >= 1.) ? (rend->w / graph->width) : 1.;
+	rend->scale_y = (graph->height >= 1.) ? (rend->h / graph->height) : 1.;
+	rend->scale = MIN (rend->scale_x, rend->scale_y);
 
+	if (size_changed) {
 		/* make sure we dont try to queue an update while updating */
 		rend->needs_update = TRUE;
 
