当有很多条形图时,如何使 ggplot 更宽?
How to make ggplot wider, when there are many bars?
我在报告中使用代码,生成图表。问题是有时我们只得到几个类别 - 然后情节看起来很好,但有时很多类别然后情节变得不可读。
我希望 ggplot 使这些图表更宽,但我不知道该怎么做。
有人知道怎么做吗?下面是一个例子。
这是可重现示例的简短版本:
tmp_data <- data.frame('topic_main_keyword_category' = c(paste0(c("Avoid Ticks In Dog", "Bedbugs Ticks & Fleas", "Cat & Dog Fleas Difference"), 1:55)),
'topic_search_volume' = sample(seq(10, 550, 10)),
'category_count' = sample(1:55))
multiplier <- max(tmp_data$topic_search_volume) / max(tmp_data$category_count)
ggplot(tmp_data) + geom_col(mapping = aes(x = topic_main_keyword_category, y = category_count, fill = topic_main_keyword_category)) +
geom_line(group = 1, mapping = aes(x = topic_main_keyword_category, y = topic_search_volume/multiplier),
color = 'darkorange1', size=1) +
ylab('Topics count') +
xlab('Categories') +
ggtitle('Topic categories') +
theme_bw(base_size = text_size_on_plots) +
scale_fill_viridis(discrete = TRUE) +
guides(fill = "none") +
scale_y_continuous(
sec.axis = sec_axis(~.*multiplier, name = "Search volume",
labels=function(x) format(x, big.mark = " ", scientific = FALSE))) +
theme(axis.text.x = element_text(angle = 90, hjust=1))
编辑:我想自动制作这些图 - 这意味着它们可以保存为具有适当宽度的 png,而无需手动调整。
最后我是这样弄的(虽然我觉得不是最优方案..):
width <- 5 # image width
if(length(unique(tmp_data$topic_main_keyword_category))<35) { width <- 5}
if(length(unique(tmp_data$topic_main_keyword_category))>=35 & length(unique(tmp_data$topic_main_keyword_category))<55) { width <- 10}
if(length(unique(tmp_data$topic_main_keyword_category))>=55 & length(unique(tmp_data$topic_main_keyword_category))<100) { width <- 15}
if(length(unique(tmp_data$topic_main_keyword_category))>=100) { width <- 25}
g <- ggplot(tmp_data) +
geom_col(mapping = aes(x = topic_main_keyword_category, y = category_count, fill = topic_main_keyword_category)) +
geom_line(group = 1, mapping = aes(x = topic_main_keyword_category, y = topic_search_volume/multiplier),
color = 'darkorange1', size=1) +
ylab('Topics count') +
xlab('Categories') +
ggtitle('Topic categories') +
theme_bw(base_size = text_size_on_plots) +
scale_fill_viridis(discrete = TRUE) +
guides(fill = "none") +
scale_y_continuous(
sec.axis = sec_axis(~.*multiplier, name = "Search volume",
labels=function(x) format(x, big.mark = " ", scientific = FALSE))) +
theme(axis.text.x = element_text(angle = 90, hjust=1))
ggsave('Topics_categories.png', plot = g, width=width)
您是否尝试过调整绘图大小 window(例如,单击 RStudio 绘图窗格中的“缩放”按钮,然后拖动边框)并保存图像?这是我得到的结果,我觉得可以接受:
如果您想以编程方式获取图像,可以使用 ggsave
将 width=
选项设置为适当的值来保存它。
我在报告中使用代码,生成图表。问题是有时我们只得到几个类别 - 然后情节看起来很好,但有时很多类别然后情节变得不可读。
我希望 ggplot 使这些图表更宽,但我不知道该怎么做。
有人知道怎么做吗?下面是一个例子。
这是可重现示例的简短版本:
tmp_data <- data.frame('topic_main_keyword_category' = c(paste0(c("Avoid Ticks In Dog", "Bedbugs Ticks & Fleas", "Cat & Dog Fleas Difference"), 1:55)),
'topic_search_volume' = sample(seq(10, 550, 10)),
'category_count' = sample(1:55))
multiplier <- max(tmp_data$topic_search_volume) / max(tmp_data$category_count)
ggplot(tmp_data) + geom_col(mapping = aes(x = topic_main_keyword_category, y = category_count, fill = topic_main_keyword_category)) +
geom_line(group = 1, mapping = aes(x = topic_main_keyword_category, y = topic_search_volume/multiplier),
color = 'darkorange1', size=1) +
ylab('Topics count') +
xlab('Categories') +
ggtitle('Topic categories') +
theme_bw(base_size = text_size_on_plots) +
scale_fill_viridis(discrete = TRUE) +
guides(fill = "none") +
scale_y_continuous(
sec.axis = sec_axis(~.*multiplier, name = "Search volume",
labels=function(x) format(x, big.mark = " ", scientific = FALSE))) +
theme(axis.text.x = element_text(angle = 90, hjust=1))
编辑:我想自动制作这些图 - 这意味着它们可以保存为具有适当宽度的 png,而无需手动调整。 最后我是这样弄的(虽然我觉得不是最优方案..):
width <- 5 # image width
if(length(unique(tmp_data$topic_main_keyword_category))<35) { width <- 5}
if(length(unique(tmp_data$topic_main_keyword_category))>=35 & length(unique(tmp_data$topic_main_keyword_category))<55) { width <- 10}
if(length(unique(tmp_data$topic_main_keyword_category))>=55 & length(unique(tmp_data$topic_main_keyword_category))<100) { width <- 15}
if(length(unique(tmp_data$topic_main_keyword_category))>=100) { width <- 25}
g <- ggplot(tmp_data) +
geom_col(mapping = aes(x = topic_main_keyword_category, y = category_count, fill = topic_main_keyword_category)) +
geom_line(group = 1, mapping = aes(x = topic_main_keyword_category, y = topic_search_volume/multiplier),
color = 'darkorange1', size=1) +
ylab('Topics count') +
xlab('Categories') +
ggtitle('Topic categories') +
theme_bw(base_size = text_size_on_plots) +
scale_fill_viridis(discrete = TRUE) +
guides(fill = "none") +
scale_y_continuous(
sec.axis = sec_axis(~.*multiplier, name = "Search volume",
labels=function(x) format(x, big.mark = " ", scientific = FALSE))) +
theme(axis.text.x = element_text(angle = 90, hjust=1))
ggsave('Topics_categories.png', plot = g, width=width)
您是否尝试过调整绘图大小 window(例如,单击 RStudio 绘图窗格中的“缩放”按钮,然后拖动边框)并保存图像?这是我得到的结果,我觉得可以接受:
如果您想以编程方式获取图像,可以使用 ggsave
将 width=
选项设置为适当的值来保存它。