我想部分禁用绘图中的悬停文本,将其限制为 ggplot 中的一个数据框或几何图形。在下面的情况下,我只想将鼠标悬停在“城市”而不是地图轮廓上。我在 Python 中看到了一个解决方案,但在 R 中没有看到。我将如何控制图像大小以保持地图尺寸正确?https://plot.ly/ggplot2/interactive-tooltip/ 上的地图演示似乎并不在意!
library(mapdata)
library(ggplot2)
library(plotly)
Japan <- map_data("world2Hires", region="Japan")
Longitude <- 140
Latitude <- 36.5
df <- cbind.data.frame(Longitude,Latitude)
df$Name <- "Tokyo"
df$Name_2 <- "T?ky?"
XX <- ggplot() + geom_polygon(data=Japan, aes(x=long, y=lat, group=group), color="black", fill="white", text="") + coord_equal() + geom_point(data=df, aes(x=Longitude, y=Latitude, text=Name), color="green")
XX
ggplotly(XX) ##How to get hover text only on df not Japan, and remove "[object Object]"
XX <- ggplot() + geom_polygon(data=Japan, aes(x=long, y=lat, group=group), color="black", fill="white", text="") + coord_equal() …Run Code Online (Sandbox Code Playgroud) 我担心我会遗漏一些明显的东西。。。我在R中有一个结构清单
List of 752
$ : Named chr "??"
..- attr(*, "names")= chr "??"
$ : Named chr "??"
..- attr(*, "names")= chr "??"
$ : Named chr "??"
Run Code Online (Sandbox Code Playgroud)
使用unlist(my_object)可以轻松获得列表的顶层。但是如何捕获属性?我可以对每个元素n使用unlist(attributes(my_object [[n]]))。但是,肯定有一种快速的方法可以将其放入数据帧。我想念什么?
我正在尝试在 sf 中创建一个简单的多边形并仅选择该多边形内的点。我在这里做错了什么?
library(concaveman)
library(ggplot2)
foo.df <- data.frame("long"=c(136,137,137,136),"lat"=c(36,36,37,37))
foo.sf <- st_as_sf(foo.df, coords = c("long","lat"))
poly <- concaveman(foo.sf) ## in case points are out of order
point.df <- data.frame("long"=c(136.2,136.5,137.5),"lat"=c(36.5,36.5,36.5))
point.sf <- st_as_sf(point.df, coords = c("long","lat"))
good_points <- st_join(point.sf,poly,join=st_within)
Run Code Online (Sandbox Code Playgroud)
st_join函数似乎没有做任何事情
ggplot() +
geom_sf(data = poly) +
geom_sf(data= good_points)
Run Code Online (Sandbox Code Playgroud)
问题不在于凹人包
good_points <- st_join(point.sf,foo.sf,join=st_within)
ggplot() +
geom_sf(data = poly) +
geom_sf(data= good_points)
Run Code Online (Sandbox Code Playgroud)
尝试创建多边形会引发错误
another_poly <- st_polygon(list(as.matrix(foo.df)))
good_points <- st_join(point.sf,another_poly,join=st_within)
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
我有一些图形代码,可以在RStudio和RPubs上完美地调用鼠标悬停时数据帧的行名...但是当嵌入Shiny中时却没有.基本代码是:
require(shiny)
require(plotly)
Trial <- read.table("http://history.emory.edu/RAVINA/Aozora/Data/Trial.txt", row.names = 1)
plot_ly(Trial, x=V1, y=V2, text=rownames(Trial), mode = "markers")
Run Code Online (Sandbox Code Playgroud)
然而,Shiny版本已完全死亡.我错过了什么?
require(shiny)
require(plotly)
Trial <- read.table("http://history.emory.edu/RAVINA/Aozora/Data/Trial.txt", row.names = 1)
ui <- fluidPage(
titlePanel("Word Frequency Analysis for Meiji-era Authors"),
mainPanel(
plotOutput("plot"),
dataTableOutput("Print")
)
)
server <- function(input, output){
output$plot<-renderPlot({
p <- plot_ly(Trial, x=V1, y=V2, text=rownames(Trial), mode = "text")
plot(p)
})
output$Print<-renderDataTable({Trial})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud) 此代码创建两个组合形状所需的轮廓
square.df <- data.frame("x"=c(0,0,1,1,0),
"y"=c(0,1,1,0,0),
"ID"=rep("square",5))
square <- st_cast(st_combine(st_as_sf(square.df,coords = c("x", "y"))),"POLYGON")
plot(square)
triangle.df <- data.frame("x"=c(0,1,0.5,0),
"y"=c(1,1,1.5,1),
"ID"=rep("triangle",4))
triangle <- st_cast(st_combine(st_as_sf(triangle.df,coords = c("x", "y"))),"POLYGON")
plot(triangle)
plot(st_union(triangle,square))
Run Code Online (Sandbox Code Playgroud)
但是如果我的数据框有多种形状,就像这样呢?
shapes.df <- rbind(square.df,triangle.df)
shapes <- st_cast(st_combine(st_as_sf(shapes.df,coords = c("x", "y"))),"POLYGON")
plot(shapes)
Run Code Online (Sandbox Code Playgroud)
我要创建什么 sf 对象以及如何获取组合多边形的轮廓?
我在编写笔记以比较apply()和scan()时发现了以下奇怪的区别。为了产生相同的结果,sweep()需要MARGIN = 1,而apply则需要MARGIN =2。另外,指定矩阵的参数是apply()中的大写字母X,而sweep()中的小写字母。
my.matrix <- matrix(seq(1,9,1), nrow=3)
row.sums <- rowSums(my.matrix)
apply.matrix <- apply(X = my.matrix, MARGIN = 2, FUN = function (x) x/row.sums)
sweep.matrix <- sweep(x = my.matrix, MARGIN = 1, STATS = rowSums(my.matrix), FUN="/")
apply.matrix - sweep.matrix ##yup same matrix
Run Code Online (Sandbox Code Playgroud)
slip()不是“应用类型”函数吗?这是另一个R怪癖还是我迷失了方向?
我正在尝试完成沿乌拉尔山脉分裂俄罗斯这一看似简单的任务,但我一定是误解了 sf_intersection 中的一些基本内容。我什至无法分割线,更不用说创建两个新的多边形
rm(list=ls())
library(rworldmap)
library(tidyverse)
library(sf)
setwd("/Users/mr56267/Documents/UT_web/TLAH_Maps_2023/Mapping_textbook")
world_sp <- fortify(getMap())
world_sf <- world_sp %>% st_as_sf(coords = c("long", "lat"), crs = 4326, row.names="group") %>%
group_by(group) %>% summarise(geometry = st_combine(geometry)) %>% st_cast("POLYGON")
ggplot() +
geom_sf(data = world_sf)
world_robinson <- st_transform(world_sf,
crs = '+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs')
Russia.sf <- world_robinson$geometry[which(world_robinson$group=="Russia.1")]
### good to here
### now split Russia on Urals
https://raw.githubusercontent.com/sashatrubetskoy/asia_europe_border/master/asia_europe_border.geojson
Urals.sf <- st_read("https://raw.githubusercontent.com/sashatrubetskoy/asia_europe_border/master/asia_europe_border.geojson")
Urals.sf <- st_transform(Urals.sf, crs = st_crs(world_robinson$geometry[which(world_robinson$group=="Russia.1")]))
Russia_line.sf <- st_cast(Russia.sf,"MULTILINESTRING")
intersection_points <- st_intersection(Russia_line.sf,Urals.sf)
intersection_points
st_intersects(intersection_points,Russia_line.sf) …Run Code Online (Sandbox Code Playgroud)