这个问题可能与早期未答复的问题重复.我还有问题.
我试图使用zipcode shapefile并出现以下错误:
tract <- readOGR(dsn = ".", layer = "cb_2013_us_zcta510_500k")
tract<-fortify(tract, region="GEOID10")
Error: isTRUE(gpclibPermitStatus()) is not TRUE
Run Code Online (Sandbox Code Playgroud)
我已经尝试安装gpclib来解决这个问题,但后来我收到以下错误:
install.packages("gpclib")
Installing package into ‘C:/Users/Nick/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
Package which is only available in source form, and may need compilation of C/C++/Fortran: ‘gpclib’
These will not be installed
Run Code Online (Sandbox Code Playgroud)
救命?
我正在尝试创建一个美国的等值区域地图,其默认颜色从灰色变为白色.
我有48个状态中的18个的记录,并且代码用于按值着色,但对于那些我没有记录的状态,状态是灰色的.我希望他们是白人.
如何更改颜色?
library(maps)
library(plyr)
library(ggplot2)
records1<-read.csv('E:/My Documents/records_by_state.csv')
records<-data.frame(state=tolower(rownames(records1)), records1)
head(records)
all_states<-map_data("state")
head(all_states)
record_map<-merge(all_states, records, by.x="region", by.y="state.name")
record_map<-arrange(record_map, group, order)
head(record_map)
p<- ggplot()
p<- p + geom_polygon(data=record_map, aes(x=long, y=lat, group=group, fill=record_map$Records), colour="black"
)+ scale_fill_continuous(low="thistle2", high="darkred", guide="colorbar")
P1 <- p + theme_bw() +labs(fill= "Records by State"
, title= "By State", x="", y="")
P1 + scale_y_continuous(breaks=c()) + scale_x_continuous(breaks=c()) + theme(panel.border= element_blank())
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚非常简单的数据,这是一种痛苦的问题.我在美国东部有以下邮政编码.这是由数据组成,但你明白了.
Zip Freq
11101 10
10014 15
11238 400
Run Code Online (Sandbox Code Playgroud)
大约100行.Freq的值范围为0-1000,这些是我想用来确定每个邮政编码颜色的值.理想情况下,我也希望地图能够集中在美国东部而不是整个国家.
我想用这些数据和每个邮政编码制作一个等值线,但我无法弄清楚如何导入邮政编码shapefile.我已经尝试过这个教程,但是我在fortify()步骤中遇到了一个错误,我无法超越.我不确定该教程的方法是否是最好的方法.
ggplot2似乎来自州和县,但我无法弄清楚如何通过邮政编码进行映射.(最终我将通过人口普查区进行映射,但现在我只想学习如何使用shapefile来获取邮政编码和这个简单的数据集)
我为choroplethr找到的所有资源都使用了现已弃用的函数.我花了几个小时追逐我的尾巴,努力使用它,我非常沮丧,所以任何帮助将不胜感激.
我的目标是在Python中创建加拿大的等值线图.假设我有一个字典,其中的值指的是每个加拿大省/地区:
myvalues={'Alberta': 1.0,
'British Columbia': 2.0,
'Manitoba': 3.0,
'New Brunswick': 4.0,
'Newfoundland and Labrador': 5.0,
'Northwest Territories': 6.0,
'Nova Scotia': 7.0,
'Nunavut': 8.0,
'Ontario': 9.0,
'Prince Edward Island': 10.0,
'Quebec': 11.0,
'Saskatchewan': 12.0,
'Yukon': 13.0}
Run Code Online (Sandbox Code Playgroud)
现在我想myvalues
使用连续的色彩图(例如,红色阴影)基于相应的值为每个省着色.怎么做?
到目前为止,我只能在matplotlib中绘制加拿大各省/地区,但它们的形状呈现出独特的颜色,我不知道如何根据数字改变它myvalues
(也许我需要玩,patches
但我不知道怎么样).
您可以在这里找到shapefile:http://www.filedropper.com/canadm1_1
这是我迄今为止的代码:
import shapefile
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
# -- input --
sf = shapefile.Reader("myfolder\CAN_adm1.shp")
recs = sf.records()
shapes …
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用此示例在Highmaps上创建一个向下钻取地图:http://www.highcharts.com/maps/demo/map-drilldown
我有这个正确使用我自己的数据在不同的国家.
这个例子的代码是:
$(function () {
var data = Highcharts.geojson(Highcharts.maps['countries/us/us-all']),
// Some responsiveness
small = $('#container').width() < 400;
// Set drilldown pointers
$.each(data, function (i) {
this.drilldown = this.properties['hc-key'];
this.value = i; // Non-random bogus data
});
// Instanciate the map
Highcharts.mapChart('container', {
chart: {
events: {
drilldown: function (e) {
if (!e.seriesOptions) {
var chart = this,
mapKey = 'countries/us/' + e.point.drilldown + '-all',
// Handle error, the timeout is cleared on success
fail = setTimeout(function () …
Run Code Online (Sandbox Code Playgroud)我明白,如果我想设置所有的子情节标题,那么我可以在声明图形时做到这一点。
import pandas as pd
import plotly.graph_objs as go
from plotly.subplots import make_subplots
fig = make_subplots(
###
subplot_titles=['Plot 1', 'Plot 2', 'Plot 3', 'Plot 4', etc.]
)
Run Code Online (Sandbox Code Playgroud)
但是,我在一个循环中创建了每个子图,我认为在该过程中设置每个子图的标题是最简单的。就我而言,我根据日期创建了一个 groupby 对象,然后遍历每个组(日期)数据框。每个数据框用于创建子图,我希望标题是日期。我知道我可以在循环之前弄清楚这一点并将 subplot_titles 设置为正常,但它似乎是循环中的单行。如果重要的话,我添加的痕迹是 choropleths。我不打算包含工作数据集,因为我的代码工作正常 - 我只想知道我需要添加哪行代码。
#Create groupby object, splitting data frame into separate data frames based on 'State'
death_counts_gbo = death_counts_by_week.groupby('End Week')
#Prepare subplots for choropleths
rows = 4
cols = 7
fig = make_subplots(
rows=rows, cols=cols,
specs = [[{'type': 'choropleth'} for c in np.arange(cols)] for r in …
Run Code Online (Sandbox Code Playgroud) 我正在尝试根据国家/地区大小调整文本大小,因此文本将位于国家/地区的董事会内部。
import pandas as pd
import plotly.express as px
df=pd.read_csv('regional-be-daily-latest.csv', header = 1)
fig = px.choropleth(df, locations='Code', color='Track Name')
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.add_scattergeo(
locations = df['Code'],
text = df['Track Name'],
mode = 'text',
)
fig.show()
Run Code Online (Sandbox Code Playgroud)
对于可视化:
橙色国家的文本位于该国家/地区的棋盘内,但标记蓝色国家的文本更大。
最好是调整大小,这样它就不会超过国家的董事会
我想创建一个Shiny应用程序,其中等值区的着色基于用户可以从中选择的许多可能的定量变量之一的数值.在简单的情况下,这是直截了当的,但是当我们有20多个变量时,我不确定最佳实践,具有非常详细的形状文件(~2300多边形).
变量可能完全相互独立,例如"总人口"或"平均温度"可能相关或不相关,但其中一些变量将具有时间关系,例如3个或更多时间点的"总人口" .
我使用的主要shapefile之一是ABS统计区2.下面我给出澳大利亚的人口密度(总人口/面积)和放大的悉尼视图,以更好地传达我感兴趣的细节水平.
我已将shapefile读入R中,并使用包中的ms_simplify()
函数大大降低了复杂性/点数rmapshaper
.
现在,就Shiny和传单而言,这就是我一直在做的事情:
在server
定义对象之前server.R
,我构建了一个包含所有所需"层"的主要地图对象.也就是说,一个传单,有许多addPolygon()
调用来定义每个"层"(组)的颜色.
# Create main map
primary_map <- leaflet() %>%
addProviderTiles(
providers$OpenStreetMap.BlackAndWhite,
options = providerTileOptions(opacity = 0.60)
) %>%
# Layer 0 (blank)
addPolygons(
data = aus_sa2_areas,
group = "blank"
) %>%
# Layer 1
addPolygons(
data = aus_sa2_areas,
fillColor = ~palette_layer_1(aus_sa2_areas$var_1),
smoothFactor = 0.5,
group = "layer_1"
) %>%
Run Code Online (Sandbox Code Playgroud)
...
# Layer N
addPolygons(
data = aus_sa2_areas,
fillColor …
Run Code Online (Sandbox Code Playgroud)我有以下简单的示例数据,我想在地图上绘制渐变颜色,对应于给定国家/地区的值.
ddf = read.table(text="
country value
USA 10
UK 30
Sweden 50
Japan 70
China 90
Germany 100
France 80
Italy 60
Nepal 40
Nigeria 20
", header=T)
Run Code Online (Sandbox Code Playgroud)
在谷歌搜索,我发现了几个网站.但是,我正在寻找小而清晰的代码,并且最好是快速的(我发现ggplot方法相对较慢).世界地图的分辨率不必高.
我试过以下代码:
library(maptools)
data(wrld_simpl)
plot(wrld_simpl)
Run Code Online (Sandbox Code Playgroud)
具体国家可以如下所示着色:使用[R]地图包 - 在世界地图上的特定国家着色 使用命令:
plot(wrld_simpl, col = c(gray(.80), "red")[grepl("^U", wrld_simpl@data$NAME) + 1])
Run Code Online (Sandbox Code Playgroud)
但是如何以渐变的颜色获得具有上述数据的地图.谢谢你的帮助.
我folium
用来创建一组国家的等值区域地图.我正在关注http://folium.readthedocs.org/en/latest/#choropleth-examples上的文档.然而.由于某种原因,地图不显示任何阴影.我正在使用来自天然地球的世界geojson(参见要点).
我的数据框看起来像:
>>> spatial_scores.head()
Out[1]:
id Country Score
PER Peru 2.810300
HND Honduras 2.734521
GUF French Guiana 2.730886
SLV El Salvador 2.473134
CRI Costa Rica 2.454963
Run Code Online (Sandbox Code Playgroud)
世界geojson看起来像:
>>> world_json['features'][0]['id']
Out [2]:
u'AFG'
Run Code Online (Sandbox Code Playgroud)
等值线代码的相关部分如下:
map1 = folium.Map(location=[-15., -60], zoom_start=4)
map1.geo_json(geo_path=world_json_path,
data_out='data.json',
data=spatial_scores,
columns=['id', 'Score'],
threshold_scale=[0, 1, 2, 3, 4],
key_on='features.id',
fill_color='BuPu', fill_opacity=0.7, line_opacity=0.5,
legend_name='Score')
map1.create_map('./Scores.html')
Run Code Online (Sandbox Code Playgroud)
有什么我做错了吗?
[编辑]
我解决了这个问题.绘制choropleth
我需要只保留那些geojson
也在我的数据框中的键.
merged = gdf.merge(spatial_scores, left_on='name', right_on='Country')
spatial_gdf = gpd.GeoDataFrame(merged.iloc[:, [0, 1]])
data_df = …
Run Code Online (Sandbox Code Playgroud) choropleth ×10
r ×5
python ×4
ggplot2 ×2
gis ×2
plotly ×2
choroplethr ×1
dictionary ×1
drilldown ×1
folium ×1
ggmap ×1
highcharts ×1
javascript ×1
jquery ×1
maps ×1
matplotlib ×1
patch ×1
r-leaflet ×1
shapefile ×1
shiny ×1
subplot ×1