如何在ggplot中自定义图例标签的名称

时间:2017-01-27 17:10:00

标签: r ggplot2 gis

我有以下代码:

p <- ggplot() + coord_fixed() + xlab("") + ylab("")

base_world <- p + geom_polygon(data=world_map, aes(x=long, y=lat, group=group), 
                                         colour="green", fill="whitesmoke") +
                      geom_point(data = as.data.frame(coordinates(busxy)), size = 1,
                                        mapping = aes(x = busxy@coords[,1], y = busxy@coords[,2],
                                                      color = busxy$color)) +
                      labs(title = "Cities\n", color = "States\n") +
                      scale_color_manual(labels = col2state$s, values = col2state$c)

打印出来: enter image description here

问题是地图上的颜色与图例中的颜色不一致。 当我从绘图中删除scale_color_manual(labels = col2state$s, values = col2state$c)时,它可以,但'States'具有数据中的颜色名称。

我的问题是:如何在图片中留下标签名称,还要为地图中的标签指定正确的颜色?

col2state$c中有29种颜色名称(如#29A934) 在col2state$s中有29个状态标签,如图例中所示。 数据框busxy包含144k条记录,其中包含29个唯一的状态值。

数据来自: library(maps)

world_map <- map_data("world")

busxy <- data.frame(x=bus[[1]]$latitude, y=bus[[1]]$longitude, city=bus[[1]]$city, state=bus[[1]]$state)

bus <- llply(as.list(jfile5), function(x) jsonlite::stream_in(file(x), pagesize = 10000))jfile5是包含所有数据的json文件的路径。

2 个答案:

答案 0 :(得分:1)

Picasso.with(this) .load(intent.getStringExtra("image_url")) .into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { showNotification(intent, bitmap); } @Override public void onBitmapFailed(Drawable errorDrawable) { Log.e(TAG, "Image download failed"); RichPushService.this.stopSelf(); } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } } 可以不使用scale_color_manual参数。解决此问题的方法是labels,其中scale_color_manual(values = my_colors)是国家/地区与其颜色的映射,以命名字符向量进行组织,例如: my_colors

一个例子:

c(AZ = "blue", NV = "red", ...)

答案 1 :(得分:0)

不是调用列,而是为颜色和状态标签保存唯一值的向量。确保向量排序匹配。

vec_c <- unique(col2state$c)
vec_s <- unique(col2state$s) #may need to re-order, or opt to manually create vector
scale_color_manual(labels = vec_c, values = vec_s)