【问题标题】:Why do I get differing legends in ggplot while world mapping?为什么在世界映射时我会在 ggplot 中得到不同的图例?
【发布时间】:2020-08-25 17:47:51
【问题描述】:

我正在尝试使用 ggplot2 和地图绘制以下 DF。我对情节本身没有问题,但两个传说看起来不同。我尝试了不同的组合,包括休息、设置限制,但两者仍然不同。我需要的是两个图的图例相同,值具有相同的颜色。

我尝试了以下方法。但这两个传说并不匹配。在 DF2 的情节中,这似乎对我有用,但在 DF1 中,传说从 100 开始,颜色不匹配。有人可以指出一个实用的解决方案吗?

library(maps)
library(ggplot2)


ggplot(data = DF1, mapping = aes(x = long, y = lat, group = group)) + 
  coord_fixed(1.3) +
  geom_polygon(aes(fill = V1), col="black") +
  scale_fill_gradientn(colours = rev(rainbow(20)),guide="colourbar",
 breaks = c(1,100, 1000, 10000,100000, 1000000),
trans = "log10")
                        +
  ggtitle("Title(log10)")

**-Plot DF2**


ggplot(data = DF2, mapping = aes(x = long, y = lat, group = group)) + 
  coord_fixed(1.3) +
  geom_polygon(aes(fill = V2), col="black") +
  scale_fill_gradientn(colours = rev(rainbow(20)),guide="colourbar",
 breaks = c(1,100, 1000, 10000,100000, 1000000),
trans = "log10")
                        +
  ggtitle("TitleDF2(log10)")

我的数据:

DF1
structure(list(long = c(55.1921882629395, 55.1940422058105, 55.1858367919922, 
55.1194343566895, 55.1042976379395, 55.0250015258789, 54.9982452392578, 
54.9224586486816, 54.8048820495605, 54.6522483825684, 54.4716796875, 
54.2701187133789, 54.0545883178711, 53.8321304321289, 53.6095695495605, 
53.39404296875, 53.1923828125, 53.0119132995605, 52.8592796325684, 
52.7416000366211, 52.6659202575684), lat = c(22.9229507446289, 
22.8500003814697, 22.7041015625, 22.6239261627197, 22.6214847564697, 
22.6311531066895, 22.6343746185303, 22.6436538696289, 22.6580085754395, 
22.6766605377197, 22.69873046875, 22.7233390808105, 22.7496585845947, 
22.7768058776855, 22.8040046691895, 22.830322265625, 22.8549308776855, 
22.8770008087158, 22.8956050872803, 22.9100093841553, 22.9192867279053
), group = c(15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
15, 15, 15, 15, 15, 15, 15, 15, 15), order = 1049:1069, region = c("United Arab Emirates", 
"United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
"United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
"United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
"United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
"United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
"United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
"United Arab Emirates", "United Arab Emirates"), subregion = c(NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_
), V1 = c(12905.6580666578, 12905.6580666578, 
12905.6580666578, 12905.6580666578, 12905.6580666578, 12905.6580666578, 
12905.6580666578, 12905.6580666578, 12905.6580666578, 12905.6580666578, 
12905.6580666578, 12905.6580666578, 12905.6580666578, 12905.6580666578, 
12905.6580666578, 12905.6580666578, 12905.6580666578, 12905.6580666578, 
12905.6580666578, 12905.6580666578, 12905.6580666578)), row.names = 1010:1030, class = "data.frame")


DF2:
structure(list(long = c(-64.3834457397461, -64.6214828491211, 
-64.8529815673828, -64.8198776245117, -64.8043899536133, -64.8694839477539, 
-64.9169006347656, -65.0694351196289, -65.1333999633789, -65.15185546875, 
-65.1549758911133, -65.1278839111328, -65.0182647705078, -65.0070266723633, 
-65.05908203125, -64.9863739013672, -64.8980484008789, -64.6995162963867, 
-64.6224594116211, -64.5377502441406, -64.51171875), lat = c(-40.9224586486816, 
-40.8544921875, -40.8137664794922, -40.7932586669922, -40.7565460205078, 
-40.73583984375, -40.7313499450684, -40.8052749633789, -40.8806648254395, 
-40.9469757080078, -41.1056632995605, -41.23876953125, -41.56689453125, 
-41.7451171875, -41.9699211120605, -42.10205078125, -42.1618156433105, 
-42.2208023071289, -42.2610321044922, -42.2545890808105, -42.2702140808105
), group = c(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 
20, 20, 20, 20, 20, 20, 20, 20, 20), order = 1554:1574, region = c("Argentina", 
"Argentina", "Argentina", "Argentina", "Argentina", "Argentina", 
"Argentina", "Argentina", "Argentina", "Argentina", "Argentina", 
"Argentina", "Argentina", "Argentina", "Argentina", "Argentina", 
"Argentina", "Argentina", "Argentina", "Argentina", "Argentina"
), subregion = c(NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_), V2 = c(5830.59840429215, 
5830.59840429215, 5830.59840429215, 5830.59840429215, 5830.59840429215, 
5830.59840429215, 5830.59840429215, 5830.59840429215, 5830.59840429215, 
5830.59840429215, 5830.59840429215, 5830.59840429215, 5830.59840429215, 
5830.59840429215, 5830.59840429215, 5830.59840429215, 5830.59840429215, 
5830.59840429215, 5830.59840429215, 5830.59840429215, 5830.59840429215
)), row.names = 1500:1520, class = "data.frame")

【问题讨论】:

    标签: r ggplot2 rworldmap


    【解决方案1】:

    为了创建相同的外观,最安全的选择是使用分面图 - 您将获得两个图的连接图例。

    我已经删除了 scale_ 中的 trans 参数...我可能会建议不要使用它。为了显示对数转换的数据,更安全的选择是先对数据进行对数转换,然后再绘制它。然后,您可以根据您的日志值设置中断(在这种情况下,1:6 相当于 10、100、1000 等)。我已经在 ggplot 中包含了一个直接执行此操作的选项。为了使效果更清晰,我稍微更改了 DF2 中的值。

    library(ggplot2)
    library(patchwork)
    
    DF2$V2 <- DF2$V2/10 #just to make the difference more obvious
    
    p1 <- 
      ggplot(data = DF1, mapping = aes(x = long, y = lat, group = group)) + 
      geom_polygon(aes(fill = log10(V1)), col="black") +
      scale_fill_gradientn(colours = rev(rainbow(20)),guide="colourbar",
                           breaks = c(1:6),
                           limits = c(1,6)) +
      ggtitle("Title(log10)")
    
    p2 <- 
      ggplot(data = DF2, mapping = aes(x = long, y = lat, group = group)) + 
      geom_polygon(aes(fill = log10(V2)), col="black") +
      scale_fill_gradientn(colours = rev(rainbow(20)),guide="colourbar",
                           breaks = c(1:6),
                           limits = c(1,6)) +
      ggtitle("TitleDF2(log10)")
    
    p1 + p2  
    

    reprex package (v0.3.0) 于 2020-05-12 创建

    【讨论】:

    • 谢谢。但它应该是一张世界地图(而不是每个国家都有不同的颜色,具体取决于与之关联的值。两个数据框(DF1 和 DF2)表示我要突出显示的不同内容。我不明白这是怎么回事应该帮助我吗?你能进一步描述你的方法吗?
    • @AjejjeBrazov23 填充美学对多边形和条形的行为相同。绘制地图或条形图都没有关系 - 对于所讨论的问题,原则上是相同的。您没有提供可重现的问题,因此我将您的问题简化为问题的核心 - 填充到值的映射。如果这不能回答您的问题,请重新表述您的问题,并提供足够的数据来完全重现您的问题。
    • 谢谢。我现在已经包含了我用来绘制两个 DF 的两个 DF。这有帮助吗?返回您的回复。两个 DF 不能组合,因为它们的变量不同。我试过你的方法,但它对我不起作用。
    猜你喜欢
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多