小编ast*_*rsk的帖子

ggplot2:为条形图的分面布局中的行指定不同的比例

我的数据在包中ggplot2通过具有多个(~10)个面的条形图进行可视化。我想首先将这些方面分成几行。我可以使用函数facet_grid()facet_wrap()来实现此目的。在此处的最小示例数据中,我在两行 (4x2) 中构建了 8 个面。但是,我需要调整不同方面的比例,即:第一行包含小比例的数据,第二行的值更大。因此,我需要对第一行中的所有数据使用相同的比例,以便沿行比较它们,并为第二行使用另一个比例。

这是最小的示例和可能的解决方案。

#loading necessary libraries and example data
library(dplyr)
library(tidyr)
library(ggplot2)

trial.facets<-read.csv(text="period,xx,yy
A,2,3
B,1.5,2.5
C,3.2,0.5
D,2.5,1.5
E,11,13
F,16,14
G,8,5
H,5,4")

#arranging data to long format with omission of the "period" variable
trial.facets.tidied<-trial.facets %>% gather(key=newvar,value=newvalue,-period)
Run Code Online (Sandbox Code Playgroud)

现在正在策划自己:

#First variant
ggplot(trial.facets.tidied,aes(x=newvar,y=newvalue,position="dodge"))+geom_bar(stat ="identity") +facet_grid(.~period)

#Second variant:
ggplot(trial.facets.tidied,aes(x=newvar,y=newvalue,position="dodge"))+geom_bar(stat ="identity") +facet_wrap(~period,nrow=2,scales="free")
Run Code Online (Sandbox Code Playgroud)

第一个和第二个变体的结果如下:

在此输入图像描述

在这两个示例中,我们要么对所有图形使用自由比例,要么对所有图形使用固定比例。同时,第一行(前 4 个面)需要稍微缩放到 5,第二行需要缩放到 15。

作为使用facet_grid()函数的解决方案,我可以添加一个假变量“row”,它指定相应的字母应该属于哪一行。新数据集 Trial.facets.row(仅显示三行)如下所示:

period,xx,yy,row
C,3.2,0.5,1
D,2.5,1.5,1
E,11,13,2
Run Code Online (Sandbox Code Playgroud)

然后我可以将相同的重新排列为长格式,省略变量“句​​点”和“行”:

trial.facets.tidied.2<-trial.facets.row %>% gather(key=newvar,value=newvalue,-period,-row)
Run Code Online (Sandbox Code Playgroud)

然后,我沿着变量“行”和“周期”排列面,希望使用该选项scales="free_y"仅跨行调整比例:

ggplot(trial.facets.tidied.2,aes(x=newvar,y=newvalue,position="dodge"))+geom_bar(stat ="identity") +facet_grid(row~period,scales="free_y")
Run Code Online (Sandbox Code Playgroud)

并且 …

r facet ggplot2 facet-wrap facet-grid

5
推荐指数
1
解决办法
7455
查看次数

在R中创建带有自定义标签的Leaflet地图

我想使用R中的世界地图来显示我的数据,其中标签将被添加到某些点(给定坐标).标签应该是一些3D矩形,其高度与数据表中的值成比例.我会使用R包"传单"(或任何替代,如果更好).世界上大约有10-15个点,每个位置有两个值(具体地,点是主要油田的位置,并且值例如是大小和储量).我想为每个点设置两个这样的3D矩形,比方说,红色和蓝色站在彼此附近,具有适当的高度和数字,并且每个点都标有油田的名称.我找到了带有传单包的解决方案,在地图上添加了适当半径的圆圈.

数据和库由代码加载:

library(leaflet)
basins<-read.csv("somedata.csv")
Run Code Online (Sandbox Code Playgroud)

somedata.csv具有以下结构(仅作为最小工作示例的四个数据):

basin,lat,lon,res.density,rel.area
Central Sumatra,1,96,16.7,75
North Sea,58.4,2,20,24
Maracaibo basin,9,-71,74.4,14.3
Los Angeles,33,-118,31.2,32
Run Code Online (Sandbox Code Playgroud)

圆圈标记的映射由命令调用

m=leaflet(data = basins) %>% addTiles() %>% addCircleMarkers(~lon, ~lat , popup = ~as.character(basin),radius=~res.density*0.4,label=~htmlEscape(basin),labelOptions=labelOptions(noHide=T,textOnly=TRUE,direction="bottom"))
Run Code Online (Sandbox Code Playgroud)

然而,这个解决方案并不是那么好,因为它不允许可视化第二个值(通过参数radius = ~res.density,其中res.density是我的.csv表中盆的第一个值的名称).

我想重现一些看起来像这张图片的东西,它是由GMT制作的.具有普通(2D)地图就足够了,但是每个点需要两个这样的矩形,其中字段的名称和每个矩形的值.

来自GMT包的图片

在此输入图像描述

diagram maps label r r-leaflet

3
推荐指数
1
解决办法
1699
查看次数

r ggplot2:在条形图中对图例进行分组

我尝试使用 ggplot2分别使用fill和来可视化条形图中的两个离散变量。alpha标准方法如下:

#creating data and building the basic bar plot
library(ggplot2)
myleg<-read.csv(text="lett,num
a,1
a,2
b,1
b,2
h,1
h,2
h,3
h,4")
ggplot(myleg, aes(lett, alpha = factor(num), fill = lett)) +
  geom_bar(position = position_stack(reverse = TRUE)) +
  scale_alpha_discrete(range = c(1, .1),
                       name = "alpha legend",
                       labels = c("alpha lab 4","alpha lab 3",
                                  "alpha lab 2", "alpha lab 1")) +
  labs(title = "initial bar plot for data")
Run Code Online (Sandbox Code Playgroud)

数据的初始条形图

默认图例根据两种不同的呈现方式进行分组(lett 和灰度的着色,或 num 的不透明度)。

我需要将图例分组为绘图上的数据栏。即三个颜色条,每个颜色条都有变化的 alpha 级别。部分解决方案是分别生成具有所需三个图例条的图,如下所示:

ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position="stack",fill="#f8766d") +scale_alpha_discrete(name="red legend",labels=c("red lab …
Run Code Online (Sandbox Code Playgroud)

r legend bar-chart ggplot2

2
推荐指数
1
解决办法
3869
查看次数

R:在银河坐标系中以莫尔韦德投影绘制天空图

我需要在 Mollweide 投影(提供 360 视角的椭圆投影,用于绘制夜空)中生成带有星座等的星图。我在https://kimnewzealand.github.io/2019/02/21/celestial-maps/找到了一个使用sf包并将天空物体的默认 EPSG:4326 数据转换为 Mollweide 投影的食谱。

在某个阶段,使用以下命令将数据转换为 Mollweide 投影:

constellation_lines_sf_trans<- st_transform(constellation_lines_sf_trans, crs = "+proj=moll")
Run Code Online (Sandbox Code Playgroud)

生成的图像按照链接中所述的方式复制,如下所示:

天空与星座的莫尔韦德投影:赤道坐标

不过没关系,坐标系是赤道的,即基本上与地球上所有坐标系具有相同的旋转轴,例如WGS84(北极向上)。例如,该图显示了银河系,其角度为 60 度。我们需要所谓的银河坐标:这是与我们银河系平面重合的坐标平面。所以,这里的银河只是椭圆轴的一条水平线。例如,在其他地方找到的解决方案似乎使用相同的技术,但那里没有给出代码:

银河系坐标系中天空的莫尔韦德投影

这里银河系是一条水平线,北极位于左上角(记为np;例如,这里可以看到北极周围扭曲的可识别的大熊座/小熊座)。我会拍摄这张图像,但有一个盲点(显示天文台的盲区,无法到达天空中的这个区域),所以我想重现这张图像:星座+莫尔韦德投影+银河系的方向参考范围。

我们能够在 R 包中的各种坐标系之间进行转换。似乎大多数 GIS 工具都使用基于地球旋转(北极向上)的各种与地球相关的坐标系和投影,以满足 GIS 所需的大多数应用程序。问题是是否可以加载并转换为预定义的银河坐标系(或者例如黄道系统),或者通过手动转换恒星数据在脚本中动态执行此转换

gis r projection ggplot2

1
推荐指数
1
解决办法
1934
查看次数

标签 统计

r ×4

ggplot2 ×3

bar-chart ×1

diagram ×1

facet ×1

facet-grid ×1

facet-wrap ×1

gis ×1

label ×1

legend ×1

maps ×1

projection ×1

r-leaflet ×1