我有一个geom_segments大小不同的图形。图例中的虚线和点大小不同。如何防止这种情况?
可复制的示例:
dataframe = data.frame(country = c("Burundi", "Kenya"),
rate1 = c(10, 3),
threshold1 = c(180, 72.2),
rate2 = c(25, 20),
threshold2 = c(242, 144),
rate3 = c(30,30))
xstart_limit <- 0
xend_limit <- 10000
linetypes <- c("dotted", "dashed")
my_colors <- c("blue","red")
pit_comparison2 <- ggplot() +
geom_segment(aes(x = xstart_limit, y = rate1, xend = threshold1, yend = rate1, colour = country, linetype = country), size = 0.6, data = dataframe[dataframe$country == "Kenya",]) +
geom_segment(aes(x = threshold1, y = rate1, xend = threshold1, yend = rate2, colour = country, linetype = country), size = 0.6, data = dataframe[dataframe$country == "Kenya",]) +
geom_segment(aes(x = threshold1, y = rate2, xend = threshold2, yend = rate2, colour = country, linetype = country), size = 0.6, data = dataframe[dataframe$country == "Kenya",]) +
geom_segment(aes(x = threshold2, y = rate2, xend = threshold2, yend = rate3, colour = country, linetype = country), size = 0.6, data = dataframe[dataframe$country == "Kenya",]) +
geom_segment(aes(x = threshold2, y = rate3, xend = xend_limit, yend = rate3, colour = country, linetype = country), size = 0.6, data = dataframe[dataframe$country == "Kenya",]) +
geom_segment(aes(x = xstart_limit, y = rate1, xend = threshold1, yend = rate1, colour = country, linetype = country), size = 1, data = dataframe[dataframe$country == "Burundi",]) +
geom_segment(aes(x = threshold1, y = rate1, xend = threshold1, yend = rate2, colour = country, linetype = country), size = 1, data = dataframe[dataframe$country == "Burundi",]) +
geom_segment(aes(x = threshold1, y = rate2, xend = threshold2, yend = rate2, colour = country, linetype = country), size = 1, data = dataframe[dataframe$country == "Burundi",]) +
geom_segment(aes(x = threshold2, y = rate2, xend = threshold2, yend = rate3, colour = country, linetype = country), size = 1, data = dataframe[dataframe$country == "Burundi",]) +
geom_segment(aes(x = threshold2, y = rate3, xend = xend_limit, yend = rate3, colour = country, linetype = country), size = 1, data = dataframe[dataframe$country == "Burundi",]) +
scale_linetype_manual(values = linetypes, breaks=c("Burundi", "Kenya")) +
scale_color_manual(values = my_colors, breaks=c("Burundi", "Kenya"))
pit_comparison2
我尝试了许多不同的东西,但从来没有能解决这个问题的传说。
2条答案
按热度按时间ekqde3dh1#
您可以将
linewidth
放在美学Map中,并将其Map到`country。创建于2023-04-09使用reprex v2.0.2
uurity8g2#
你可以通过在
guides()
中定义和覆盖这些美学来修复图例的外观 * 而不修改你在图中看到的内容 *。然而,我也会 * 强烈建议 * 一种不同的方法来绘制你这里的数据。改变传说中的美学(不改变剧情)
guides()
函数可用于指定显示每个图例的不同方式。由于您将color
和linetype
美学应用于数据,我们必须注意不要以导致拆分图例的方式更改外观。您可以通过guide_legend(override.aes=list(...))
为图例中的每个项目指定不同的linewidth
值。I'我还指定了一个更宽的键宽度,以更好地显示线条。更好的绘图方式:使用路径几何体
更好的绘图方法是(1)使用tidy data principles更好地组织数据,以及(2)使用
geom_path()
而不是单独调用geom_segment()
。如果数据变得很大,你将有一个庞大的代码集来创建你的绘图。而且,每当你得到新数据时,你必须把这些数据点中的每一个都作为一行添加到你的数据中 * 和 * 代码中!它'最好考虑一个更好的约定来组织数据,并使用代码绘制,该代码给出的结果与数据中的观察。path geom在数据集中的点之间绘制线条,因此它对这样的数据很有用。
首先,您的数据框以适合Tidy Data的方式表示如下:
整个绘图代码要简单得多,无论数据框
df
中有多少个观测值,都可以使用: