マップベースのヒートマップをブラウザーにマウントし、ヒートマップに表示される変数を変更できる光沢のあるアプリを開発しようとしています。マップは、GIS シェープ ファイルを含む地理的領域のものであり、選択された変数がヒート マップとしてマップ上に表示されます。残念ながら、変数がggplot()
正しく渡されず、マップが失敗するという問題があります。以下の server.r コードはストレートな R スクリプトとして問題なく正常に実行されますが、Shiny に適合させると失敗します。
この問題はggplot()
、server.r の次のコードで発生します。
myplot1 <- myplot1 + aes(long, lat, group = group, fill = input$var) + ...
エラーが発生します:
eval(expr、envir、enclos)のエラー:オブジェクト「入力」が見つかりません
これは、 がui.r から渡されていることをfill = input$var
認識していないことに関係しています。は、ヒート マップに表示するために ui.r で選択された変数 (var1、var2 など) です。これは、認識されないコードで私が知っている唯一のインスタンスです。この行の前に使用しましたが、目的の変数の名前が明確に保持されています。(例)でハードコーディングすると、正常に動作し、マップが正しく表示されます。input$var
input$var
input$var
print(str(input$var))
fill=var1
ggplot()
私も使用environment = environment()
しましたggplot()
が、これは別のエラーを生成します:
エラー: 連続スケールに離散値が指定されました
変数で記述されたデータ フレームを探しているが、代わりに単一の値を取得することを意味すると解釈しています。
欠けている単純なもの、つまり宣言または再割り当てする必要があるものだと感じます。これに関する洞察、ガイダンス、またはフィードバックをいただければ幸いです。どうもありがとう !!
# server.R
library(shiny)
library(maps)
library(mapdata)
library(sp)
library(maptools)
library(scales)
library(RColorBrewer)
library(ggplot2)
library(rgeos)
library(plyr)
library(reshape)
library(mapproj)
library(rgdal)
library(grid)
library(gridExtra)
setwd("C:/Shiny")
# Step 1 Read/loading the target shapefile
gregion = readOGR(dsn="C:/Shiny", layer="duid")
# Step 2 Get row numbers from .dbf / explicitly identifies attribute rows by the .dbf offset.
gregion@data$id = rownames(gregion@data)
# Step 3 Makes centroid (point layer) from polygon "FORTIFY"
gregion.points = fortify(gregion, region="id")
# Step 4 Reading in .csv which will be joined to .dbf using "MERGE"
mydata <- read.csv("c:/Shiny/dataset.txt")
# Step 5 Joins the points to their corresponding attributes and finalizes the data preparation
gregion.df = join(gregion.points, gregion@data, by="id")
# Step 6 Merge makes an inner join of the shapefile's data frame and the .csv on a common item (usually the spatial key)
mygeomdata <- merge(gregion.df, mydata, by.x="UID", by.y="UID")
# Define server logic required to plot various variables as heatmap
# Step 7 Create map
shinyServer(function(input, output) {
# Compute the forumla text in a reactive expression since it is
# shared by the output$caption and output$mapPlot expressions
formulaText <- reactive({
paste("Variable:", input$var)
})
# Return the formula text for printing as a caption
output$caption <- renderText({
formulaText()
})
output$mapPlot <- renderPlot({
myplot1 <- ggplot(mygeomdata)
myplot1 <- myplot1 + aes(long, lat, group = group, fill = input$var) + labs(x = "Easting", y = "Northing") + scale_fill_gradient(low = "ghostwhite", high = "steelblue")
myplot1 <- myplot1 + geom_polygon()
myplot1 <- myplot1 + coord_equal()
print(myplot1)
})
})
#ui.R
library(shiny)
shinyUI(pageWithSidebar(
# Application title
headerPanel("Mapping"),
# Sidebar with controls to select the variable to plot
#
sidebarPanel(
selectInput("var", "Variable:",
list("Variable 1" = "var1",
"Variable 2" = "var2"))
),
# Show the caption and plot of the requested variable
mainPanel(
h3(textOutput("caption")),
plotOutput("mapPlot")
)
))
データセットのサンプルmydata <- read.csv("c:/Shiny/dataset.txt")
は次のとおりです。
UID var1 var2 var3 var4 var5 var6 var7
1 0 0.001 0 0 0 0 0
2 0 0 0 0 1 0 0
3 0 0 0 0 0 0 0
4 0 0 0 0 1 0 0
5 0 0 0 0 1 0 0
6 0 0 0 0 1 0 0
7 0 0 0 0 0 0 0
8 0 0.004 0.026 0 0 0 0
9 0.499 0.014 0 0.499 1 0 0.033
10 0.573 0.002 0.015 0.573 1 0 0.427
11 1 0.003 0.01 1 1 0 0
mygeomdata
次の構造があります。
$ UID : int 1 1 1 1 1 1 1 1 1 1 ...
$ long : num 393121 392895 392895 392840 392839 ...
$ lat : num 5501404 5502275 5502275 5502489 5502494 ...
$ order : int 1 2 3 4 5 6 7 8 9 10 ...
$ hole : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ piece : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
$ group : Factor w/ 5693 levels "0.1","1.1","10.1",..: 1 1 1 1 1 1 1 1 1 1 ...
$ id : chr "0" "0" "0" "0" ...
$ DUID : Factor w/ 5656 levels "130023362","130023367",..: 1 1 1 1 1 1 1 1 1 1 ...
$ PC : Factor w/ 3617 levels "0","ZZZ0A3","ZZZ0A4",..: 3271 3271 3271 3271 3271 3271 3271 3271 3271 3271 ...
$ DUIDAREA : num 21687 21687 21687 21687 21687 ...
$ ELEV : num 14.8 14.8 14.8 14.8 14.8 ...
$ GroupUp : int 2 2 2 2 2 2 2 2 2 2 ...
$ GroupUpT : Factor w/ 2 levels "A","B": 2 2 2 2 2 2 2 2 2 2 ...
$ var1 : num 0 0 0 0 0 0 0 0 0 0 ...
$ var2 : num 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 ...
$ var3 : num 0 0 0 0 0 0 0 0 0 0 ...
$ var4 : num 0 0 0 0 0 0 0 0 0 0 ...
$ var5 : int 0 0 0 0 0 0 0 0 0 0 ...
$ var6 : num 0 0 0 0 0 0 0 0 0 0 ...
$ var7 : num 0 0 0 0 0 0 0 0 0 0 ...