相关疑难解决方法(0)

在ggplot2中具有自动计算的sec_axis公式的双轴图

I need to write a function that would allow me to quickly do a dual axis plot using ggplot2. I know that dual axis plots are generally deprecated, but still I think it may be useful if you're after observing similar patterns in time series (for all of those who disagree, please treat this question strictly technically). It is actually possible with sec_axis() function from ggplot2, but it needs a defined formula. So here's my attempt to calculate …

r ggplot2

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

ggplot2中的双y轴用于多个面板图

我们不能用ggplot2轻松创建双y轴.

如果数字有多个面板(由geom_wrap或geom_grid创建),例如下面的4面板图,则这些技巧无法工作.我想将p1的轴添加到合并图的面板的右侧.

编辑:我在这里删除了我的代码并发布我自己的解决方案作为答案.以防有人需要它.

r ggplot2

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

如何在双y轴ggplot上显示图例

我正在尝试使用ggplot构建双y轴图表.首先,请允许我说,我不是在讨论是否这样做是好的做法的优点.在查看基于时间的数据以确定2个离散变量的趋势时,我发现它们特别有用.在我看来,对此的进一步讨论更适合交叉验证.

Kohske提供了一个如何做到这一点的非常好的例子,到目前为止我已经习惯了很好的效果.然而,我无法在两个y轴上包含一个图例.我在这里这里也看到过类似的问题,但似乎没有人能解决包含传奇的问题.

我有一个可重现的例子,使用ggplot中的钻石数据集.

数据

library(ggplot2)
library(gtable)
library(grid)
library(data.table)
library(scales)

grid.newpage()

dt.diamonds <- as.data.table(diamonds)

d1 <- dt.diamonds[,list(revenue = sum(price),
                        stones = length(price)),
                  by=clarity]

setkey(d1, clarity)
Run Code Online (Sandbox Code Playgroud)

图表

p1 <- ggplot(d1, aes(x=clarity,y=revenue, fill="#4B92DB")) +
  geom_bar(stat="identity") +
  labs(x="clarity", y="revenue") +
  scale_fill_identity(name="", guide="legend", labels=c("Revenue")) +
  scale_y_continuous(labels=dollar, expand=c(0,0)) + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1),
        axis.text.y = element_text(colour="#4B92DB"), 
        legend.position="bottom")

p2 <- ggplot(d1, aes(x=clarity, y=stones, colour="red")) +
  geom_point(size=6) + 
  labs(x="", y="number of stones") + expand_limits(y=0) +
  scale_y_continuous(labels=comma, expand=c(0,0)) +
  scale_colour_manual(name …
Run Code Online (Sandbox Code Playgroud)

charts r ggplot2 gtable data.table

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

如何在ggplot2中添加第二轴标签?

基于我之前的问题,我想在图的另一侧添加第二个轴标签.

数据框看起来像:

test <- structure(list(characteristic = structure(c(1L, 2L, 3L, 1L, 2L
), .Label = c("Factor1", "Factor2", "Factor3"), class = "factor"), 
    es = c(1.2, 1.4, 1.6, 1.3, 1.5), ci_low = c(1.1, 1.3, 1.5, 
    1.2, 1.4), ci_upp = c(1.3, 1.5, 1.7, 1.4, 1.6), label = structure(c(1L, 
    3L, 5L, 2L, 4L), .Label = c("1.2 (1.1, 1.3)", "1.3 (1.2, 1.4)", 
    "1.4 (1.3, 1.5)", "1.5 (1.4, 1.6)", "1.6 (1.5, 1.7)"), class = "factor"), 
    set = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("H", …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

如何从stats :: biplot和ggplot2 :: autoplot从ggfortify R包中生成的biplots获得相同的加载比例?

从包装生产的stats::biplotggplot2::autoplotggfortify R包装生产的双层的加载尺度是不同的.我怎样才能得到相同的负载秤从生产的二维图stats::biplot,并ggplot2::autoplotggfortify R包?

stats::biplot(prcomp(USArrests, scale = TRUE))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r graph pca ggfortify

6
推荐指数
0
解决办法
436
查看次数

带有 sec.axis 的 ggplot 的 Y 限制

我需要使用 sec.axis 创建双 y 图,但无法使两个轴正确缩放。

我一直在遵循此线程中找到的说明:ggplot with 2 y axis on every side and differentscale

但每次我将 ylim.prim 中的下限更改为 0 以外的任何值时,都会弄乱整个图。出于可视化的原因,我需要两个轴的非常具体的 y 限制。另外,当我将 geom_col 更改为 geom_line 时,它​​也会弄乱辅助轴的限制。

climate <- tibble(
  Month = 1:12,
  Temp = c(23,23,24,24,24,23,23,23,23,23,23,23),
  Precip = c(101,105,100,101,102, 112, 101, 121, 107, 114, 108, 120)
  )

ylim.prim <- c(0, 125)   # in this example, precipitation
ylim.sec <- c(15, 30)    # in this example, temperature

b <- diff(ylim.prim)/diff(ylim.sec)
a <- b*(ylim.prim[1] - ylim.sec[1])

ggplot(climate, aes(Month, Precip)) +
  geom_col() +
  geom_line(aes(y …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

以计数作为标签的 2D 摘要图

value我在特定点 (lon和)测量了数量 ( ) lat,如下面的示例数据:

library(ggplot2)
set.seed(1)
dat <- data.frame(lon = runif(1000, 1, 15), 
                  lat = runif(1000, 40, 60), 
                  value = rnorm(1000))
Run Code Online (Sandbox Code Playgroud)

我想用空间颜色对测量值进行二维汇总(例如平均值),最重要的是我想将计数显示为标签。

我可以绘制标签和摘要图

## Left plot
ggplot(dat) +
  aes(x = lon, y = lat, z = value) +
  stat_summary_hex(bins = 5, fun = "mean", geom = "hex")
## Right plot
ggplot(dat) +
  aes(x = lon, y = lat, z = value) +
  stat_binhex(aes(label = ..count..), bins = 5, geom = "text")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但当我将两者结合起来时,我失去了总结:

ggplot(dat) +
  aes(x …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2

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

如何用ggplot2制作帕累托图(又名排序图)

我发现"使用开源工具进行数据分析"一书中的排序图表(也称为Pareto图表)非常有用.所以我试着用ggplot2绘制书中的例子.

书中给出了下图,注意坐标被翻转,使得国家的名称显示在Y轴上,更具可读性.虚线是数据的CDF(累积分布函数).

排名顺序图 (来源:使用开源工具进行数据分析)

要制作部分模拟数据:

country = c('US', 'Brazil', 'Japan', 'India', 'Germany', 'UK', 'Russia', 'France')

sales = c(40, 14, 7, 6, 2.8, 2, 1.8, 1)

# The data is already sorted
df = data.table(country=country, sales=sales)
Run Code Online (Sandbox Code Playgroud)

然后我用stat_ecdfggplot2来绘制CDF:

ggplot(data=df) + stat_ecdf(aes(x=sales))
Run Code Online (Sandbox Code Playgroud)

但这个数字看起来像:

在此输入图像描述

X轴显示销售量但不显示国家/地区.


我发现了另一种实现方式在这里.但它是通过折线图和明确的累积和实现的,这看起来与书中的例子完全不同.

是否有方法将帕累托图绘制为第一个数字?


编辑

我对虚线的内涵犯了一个错误.它不是CDF,而是累积比例.

在一个CDF,它的值映射到其百分等级,的百分等级US为100但秩顺序图表中,所述percentageUS是约45%,这表明在销售US占用总销售额的45%.

因此,我不应该使用stat_ecdf绘制排序图表.

r ggplot2

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

geom_bar + geom_line:具有不同的y轴刻度?

有没有办法用geom_line绘制geom_bar,如下图所示.

在此输入图像描述

我想出了两个独立的图表.如何将它们分别与左右两侧的两个不同轴组合.

library(ggplot2)
temp = data.frame(Product=as.factor(c("A","B","C")),
                  N = c(17100,17533,6756),
                  n = c(5,13,11),
                  rate = c(0.0003,0.0007,0.0016),
                  labels = c(".03%",".07%",".16%"))

p1 = ggplot(data = temp, aes(x=Product,y=N))+
  geom_bar(stat="identity",fill="#F8766D")+geom_text(aes(label=n,col="red",vjust=-0.5))+
  theme(legend.position="none",axis.title.y=element_blank(),axis.text.x = element_text(angle = 90, hjust = 1))
  p1
p2 = ggplot(data = temp,aes(x=Product,y=rate))+
  geom_line(aes(group=1))+geom_text(aes(label=labels,col="red",vjust=0))+
  theme(legend.position="none",axis.title.y=element_blank(),
        axis.text.x = element_text(angle = 90, hjust = 0))+
  xlab("Product")
p2
Run Code Online (Sandbox Code Playgroud)

非常感谢.

r ggplot2 geom-bar

5
推荐指数
2
解决办法
4276
查看次数

如何在ggplot2 R中将sec_axis()用于离散数据?

我有一些谨慎的数据,如下所示:

height <- c(1,2,3,4,5,6,7,8)
weight <- c(100,200,300,400,500,600,700,800)
person <- c("Jack","Jim","Jill","Tess","Jack","Jim","Jill","Tess")
set <- c(1,1,1,1,2,2,2,2)
dat <- data.frame(set,person,height,weight)
Run Code Online (Sandbox Code Playgroud)

我正在尝试绘制具有相同x轴(人)和2个不同y轴(体重和身高)的图表。我发现所有示例都试图使用基准图绘制辅助轴(sec_axis)或谨慎的数据。有没有一种简单的方法可以将sec_axis用于ggplot2上的离散数据?编辑:评论中有人建议我尝试建议的答复。但是,我现在遇到这个错误

这是我当前的代码:

p1 <- ggplot(data = dat, aes(x = person, y = weight)) + 
  geom_point(color = "red") + facet_wrap(~set, scales="free") 
p2 <- p1 + scale_y_continuous("height",sec_axis(~.*1.2, name="height"))
p2

I get the error: Error in x < range[1] : 
  comparison (3) is possible only for atomic and list types
Run Code Online (Sandbox Code Playgroud)

或者,现在我修改了示例以匹配发布的示例。

p <- ggplot(dat, aes(x = person))
p <- p + geom_line(aes(y = height, …
Run Code Online (Sandbox Code Playgroud)

r axes ggplot2 multiple-axes

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

标签 统计

r ×10

ggplot2 ×9

axes ×1

charts ×1

data.table ×1

geom-bar ×1

ggfortify ×1

graph ×1

gtable ×1

multiple-axes ×1

pca ×1

plot ×1