相关疑难解决方法(0)

如何用2个不同的y轴绘图?

我想在R中叠加两个散点图,使得每组点具有其自己的(不同的)y轴(即,在图中的位置2和4),但是这些点看起来叠加在同一图上.

有可能这样做plot吗?

编辑显示问题的示例代码

# example code for SO question
y1 <- rnorm(10, 100, 20)
y2 <- rnorm(10, 1, 1)
x <- 1:10
# in this plot y2 is plotted on what is clearly an inappropriate scale
plot(y1 ~ x, ylim = c(-1, 150))
points(y2 ~ x, pch = 2)
Run Code Online (Sandbox Code Playgroud)

plot r yaxis

115
推荐指数
6
解决办法
17万
查看次数

如何使用具有双y轴ggplot的facet

我一直试图从这里扩展我的场景以利用facets(特别是facet_grid()).

我已经看过这个例子,但是我似乎无法让它为我geom_bar()geom_point()组合工作.我试图从仅仅改变例子中使用的代码facet_wrapfacet_grid这也似乎让第一层不显示.

对于网格和凹凸,我是一个非常新手,所以如果有人可以提供一些指导,如何使P1显示左侧y轴,P2显示在右侧y轴上,这将是很好的.

数据

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=c("clarity","cut")]

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

p1和p2

p1 <- ggplot(d1, aes(x=clarity,y=revenue, fill=cut)) +
  geom_bar(stat="identity") +
  labs(x="clarity", y="revenue") +
  facet_grid(. ~ cut) +
  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 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gtable

27
推荐指数
2
解决办法
6652
查看次数

在ggplot2中创建任意窗格

在基本图形中,我可以通过执行以下操作创建4个面板图形窗格:

par(mfrow=c(2,2))
for (i in 1:4){
  plot(density(rnorm(100)))
}
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

我想用ggplot2做同样的事情,但我无法弄清楚如何做到这一点.我不能使用facet,因为我的真实数据,与这个简单的例子不同,是非常不同的结构,我想要两个图表是点图表,两个图表是直方图.如何在ggplot2中创建面板或窗格?

r ggplot2

25
推荐指数
4
解决办法
4815
查看次数

使用带有facet_wrap的ggplot2显示不同的轴标签

我有一个包含不同变量和不同单位的时间序列,我想在同一个图上显示.

ggplot不支持多轴(如此处所述),所以我按照建议并尝试使用facet绘制曲线:

x <- seq(0, 10, by = 0.1)
y1 <- sin(x)
y2 <- sin(x + pi/4)
y3 <- cos(x)

my.df <- data.frame(time = x, currentA = y1, currentB = y2, voltage = y3)
my.df <- melt(my.df, id.vars = "time")
my.df$Unit <- as.factor(rep(c("A", "A", "V"), each = length(x)))

ggplot(my.df, aes(x = time, y = value)) + geom_line(aes(color = variable)) + facet_wrap(~Unit, scales = "free_y", nrow = 2)
Run Code Online (Sandbox Code Playgroud)

结果如下: 在此输入图像描述

事情是,只有一个y标签,说"值",我想要两个:一个带"电流(A)",另一个带"电压(V)".

这可能吗?

r ggplot2

21
推荐指数
2
解决办法
9393
查看次数

如何在ggplot2的右侧放置转换后的比例?

我正在创建一个图表,显示湖水位随时间的变化.我在下面附上了一个简单的例子.我想在图的右侧添加一个刻度(刻度线和注释),以英尺为单位显示高程.我知道ggplot2不会允许两个不同的比例(参见2 y轴的绘图,左边的一个y轴,右边的另一个y轴),但因为这是相同比例的转换,有没有办法做这个?我更喜欢继续使用ggplot2而不必恢复到plot()函数.

library(ggplot2)
LakeLevels<-data.frame(Day=c(1:365),Elevation=sin(seq(0,2*pi,2*pi/364))*10+100)
p <- ggplot(data=LakeLevels) + geom_line(aes(x=Day,y=Elevation)) + 
  scale_y_continuous(name="Elevation (m)",limits=c(75,125)) 
p
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

R:在ggplot2中将校准轴添加到PCA双标图中

我正在使用一个圣职包ggplot2.现在我正在以传统方式构建biplots,负载用箭头表示.我也感兴趣的是使用校准轴并将加载轴表示为通过原点的线,并且加载标签显示在绘图区域外.在基础R中,这是在实现的

library(OpenRepGrid)
biplot2d(boeker)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我正在寻找ggplot2解决方案.有人会有任何想法如何实现这样的事情ggplot2吗?在绘图区域外添加变量名称可以我想的那样完成,但是如何绘制绘图区域外的线段?

目前我所拥有的是

install.packages("devtools")
library(devtools)
install_github("fawda123/ggord")
library(ggord)
data(iris)
ord <- prcomp(iris[,1:4],scale=TRUE)
ggord(ord, iris$Species)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

负载在 ord$rotation

                    PC1         PC2        PC3        PC4
Sepal.Length  0.5210659 -0.37741762  0.7195664  0.2612863
Sepal.Width  -0.2693474 -0.92329566 -0.2443818 -0.1235096
Petal.Length  0.5804131 -0.02449161 -0.1421264 -0.8014492
Petal.Width   0.5648565 -0.06694199 -0.6342727  0.5235971
Run Code Online (Sandbox Code Playgroud)

如何通过原点,外部刻度和轴区域外的标签添加线条(可能包括上面为重叠标签应用的冷抖动)?

NB我不想关闭剪辑,因为我的一些情节元素有时可能会超出边界框

编辑:其他人之前显然问了一个类似的问题,尽管这个问题仍然没有答案.它指出,要在基地R中做这样的事情(虽然以一种丑陋的方式),人们可以这样做

plot(-1:1, -1:1, asp = 1, type = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "")
abline(a = 0, b = -0.75) …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 ggbiplot

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

在ggplot2中组合条形图和折线图(双轴)

我有double-y-axis图表制作Excel.在Excel中,它只需要基本技能.我想做的是使用ggplot2库复制此图表R.

在此输入图像描述

我已经这样做了,但我需要绘制Response 2nd-y-axis.

在此输入图像描述

我附上了我用过的可重现的代码:

#Data generation
Year <- c(2014, 2015, 2016)
Response <- c(1000, 1100, 1200)
Rate <- c(0.75, 0.42, 0.80)

df <- data.frame(Year, Response, Rate)

#Chart
library(ggplot2)

ggplot(df)  + 
  geom_bar(aes(x=Year, y=Response),stat="identity", fill="tan1", colour="sienna3")+
  geom_line(aes(x=Year, y=Rate),stat="identity")+
  geom_text(aes(label=Rate, x=Year, y=Rate), colour="black")+
  geom_text(aes(label=Response, x=Year, y=0.9*Response), colour="black")
Run Code Online (Sandbox Code Playgroud)

r linechart bar-chart ggplot2 yaxis

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

在ggplot2中构建双y轴图的功能

我正在测试一个函数来在ggplot2中构建一个双y轴图.它工作但我无法从输入图形中获取一些元素.我建立这两个图有两个数据帧Base1Base2(我加dput()在最后的部分版本):

library(ggplot2)
library(scales)
library(gtable)
#Graph 1
g1<-ggplot(Base1, aes(x = Month, y = value, fill = variable)) +
  geom_bar(stat="identity",colour="black",size=1) +
  scale_y_continuous(labels = comma,breaks=pretty_breaks(n=7),
                     limits=c(0,max(Base1$value,na.rm=T))) +
  theme(axis.text.x=element_text(angle=90,colour="grey20",face="bold",size=12),
        axis.text.y=element_text(colour="grey20",face="bold",hjust=1,vjust=0.8,size=15),
        axis.title.x=element_text(colour="grey20",face="bold",size=16),
        axis.title.y=element_text(colour="grey20",face="bold",size=16)) +
  xlab('Month')+ylab('')+ ggtitle("My graph") +
  theme(plot.title = element_text(lineheight=3, face="bold", color="black",size=24)) +
  theme(legend.text=element_text(size=14),
        legend.title=element_text(size=14)) +
  scale_fill_manual(name = "variable", 
                    label = "Power", 
                    values = "#FF6C91")  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

第二个:

#Graph2
colors=c("red","darkgreen")
g2<-ggplot(Base2, aes(x=Month, y=value, color=variable))+ 
  geom_line(aes(group=variable),size=1.3) +
  geom_point(size=3.8, shape=21, fill="white") + 
  scale_color_manual(values=colors)+ ggtitle("My graph")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

使用这两个图形我使用下一个函数两个制作双y轴图:

double_axis_graph <- function(graf1,graf2){
  graf1 <- graf1 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

辅助/双轴 - ggplot

我打开这个问题有三个原因:第一,用ggplot重新开启双轴讨论.其次,要问是否有一种非折磨的通用方法来做到这一点.最后,请求您提供有关解决方案的帮助.

我意识到关于如何将辅助轴添加到ggplot有多个讨论和问题.这些通常最终得出两个结论之一:

  1. 这很糟糕,不要这样做:Hadley Wickham在这里回答了同样的问题,得出结论认为这是不可能的.他有一个非常好的论据,即"使用单独的y尺度(不是彼此变换的y尺度)从根本上是有缺陷的".

  2. 如果你坚持,过度复杂的生活和使用网格:例如在这里这里


然而,这里是我经常遇到的一些情况,其中可视化将极大地受益于双轴.我抽象了下面的概念.

  1. 该图是宽的,因此重复右侧的y轴将有助于(或顶部的x轴)将使解释变得容易.(我们都偶然发现了其中一个我们需要在屏幕上使用标尺的图,因为轴太远了) 在此输入图像描述

  2. 我需要添加一个新轴,它是对原始轴的转换(例如:百分比,分位数,......).(我目前面临的问题是.下面的可重复示例) 在此输入图像描述

  3. 最后,添加分组/元信息:当我使用具有多级的分类数据时,我偶然发现(例如:Categories = {1,2,x,y,z},它们被"元分"为字母和数字.) 尽管对元级别进行颜色编码并添加图例甚至构面解决了问题,但使用辅助轴时,事情会变得更简单一些,用户不需要将条形图的颜色与条形图的颜色相匹配.传奇. 在此输入图像描述


一般问题:鉴于新的可扩展性功能ggplot 2.0.0,是否有更强大的无折磨方式来使双轴不使用网格?

最后一条评论:我绝对同意双轴的错误使用可能会产生危险的误导......但是,对于信息可视化和数据科学而言,情况并非如此?



解决方法问题:

目前,我需要一个百分比轴(第二种情况).我用过annotategeom_hline作为解决方法.但是,我无法将文字移到主要情节之外.hjust也似乎没有和我合作.

可重复的例子:

library(ggplot2)

# Random values generation - with some manipulation : 
maxVal = 500
value = sample(1:maxVal, size = 100, replace = T)
value[value < 400] = value[value < 400] * 0.2
value[value > 400] …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

如何在ggplot2中更改辅助线轴颜色

ggplot2,我怎么能修改axis.line.y只对sec.axis(如果可能的话)?

    p <- ggplot(mtcars, aes(cyl, mpg)) +
      geom_point()

    # Create a simple secondary axis
    p + scale_y_continuous(sec.axis = sec_axis(~.+10)) +
      theme(axis.line.y = element_line(color = "red"),
            # I can modify text color but not sure about line?
            axis.text.y.right = element_text(color = "red"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:如评论beloew所示,对右轴元素的完全控制现在包含在ggplot2的开发版本中 theme( axis.line.y.right = element_line(color = "red"), axis.ticks.y.right = element_line(color = "red"))

plot r ggplot2

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

标签 统计

r ×10

ggplot2 ×9

plot ×3

yaxis ×2

bar-chart ×1

ggbiplot ×1

gtable ×1

linechart ×1