可以将图例大小设置为自动吗? (ggplot2)
Posted
技术标签:
【中文标题】可以将图例大小设置为自动吗? (ggplot2)【英文标题】:Possible to set legend size to auto? (ggplot2) 【发布时间】:2020-09-20 17:07:36 【问题描述】:我在 ggplot 中显示图例时遇到问题。我的数据每天都在变化,有时我有大约 20 个数据点,有时只有 5 个数据点。
图例超出了图表的限制。但始终将其绘制成低比例并不是一个好的选择。
这是一个情节:
require(data.table)
require(ggplot2)
df <- data.table(name = c("A12345678901234567890", "B12345678901234567890", "C12345678901234567890", "D12345678901234567890", "E12345678901234567890", "F12345678901234567890", "G12345678901234567890", "H12345678901234567890", "I12345678901234567890"), val = runif(n = 9))
plotcolors <- rainbow(df[,.N, by = name][,.N], end = 0.65)
p <- ggplot(data = df)
p <- p +
scale_fill_manual(values = plotcolors) +
aes(x = name, y = val, fill = name) +
theme(axis.text.x=element_blank(), legend.position = "bottom", text = element_text(size = 10), legend.text = element_text(size = 10), legend.title = element_text(size = 10), plot.margin = margin(10, 10, 10, 10, "pt")) +
xlab(NULL) +
scale_y_continuous()
p <- p + geom_bar(stat = "identity", colour = "black")
print(p)
在方形画布上输出它会将图例写入范围之外。 是否可以创建一种自动缩放?
2020 年 6 月 8 日更新:
剧情是这样的:
曲线的数量不同。所以图例改变了,我需要手动调整大小。我可能会通过计算每个元素的字符来计算大小,并尝试估计可能的缩放比例。不过如果 ggplot2 自己做就好了。
【问题讨论】:
【参考方案1】:据我所知,ggplot 中不存在这样的图例自动缩放。使图更大(通过 ggsave 或仅通过使设备更大)可以帮助将图例适合图。
但是在此处给出的示例中,正确标记 x 轴会更容易,因为您将相同的变量映射到 x 并填充。您实际上并不需要fill
,但您仍然可以添加它,最好不要添加图例。
如果你还想修改图例的布局,可以去guide_legend()
看看,不过这里确实不是这样。
library(data.table)
library(ggplot2)
set.seed(42)
df <- data.table(name = c("A12345678901234567890", "B12345678901234567890", "C12345678901234567890", "D12345678901234567890", "E12345678901234567890", "F12345678901234567890", "G12345678901234567890", "H12345678901234567890", "I12345678901234567890"), val = runif(n = 9))
# Simple version
ggplot(df) +
geom_bar(aes(name, val), stat = "identity") +
theme(axis.text.x = element_text(angle = 90))
# Version with fill also mapped to name
ggplot(df) +
geom_bar(aes(name, val, fill = name), stat = "identity") +
theme(axis.text.x = element_text(angle = 90),
legend.position = "none")
【讨论】:
其实稍微复杂一点。每个栏分为更多子类别。我没有在示例中显示它,以免使其更加混乱。我正在考虑完全改变图表,也许是树状图。 子组有超大图例?如果您提供了更新的示例,我可以看看它以上是关于可以将图例大小设置为自动吗? (ggplot2)的主要内容,如果未能解决你的问题,请参考以下文章