我想在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) 我一直试图从这里扩展我的场景以利用facets(特别是facet_grid()).
我已经看过这个例子,但是我似乎无法让它为我geom_bar()和geom_point()组合工作.我试图从仅仅改变例子中使用的代码facet_wrap来facet_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) 在基本图形中,我可以通过执行以下操作创建4个面板图形窗格:
par(mfrow=c(2,2))
for (i in 1:4){
plot(density(rnorm(100)))
}
Run Code Online (Sandbox Code Playgroud)
结果

我想用ggplot2做同样的事情,但我无法弄清楚如何做到这一点.我不能使用facet,因为我的真实数据,与这个简单的例子不同,是非常不同的结构,我想要两个图表是点图表,两个图表是直方图.如何在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)".
这可能吗?
我正在创建一个图表,显示湖水位随时间的变化.我在下面附上了一个简单的例子.我想在图的右侧添加一个刻度(刻度线和注释),以英尺为单位显示高程.我知道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) 我正在使用一个圣职包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) 我有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) 我正在测试一个函数来在ggplot2中构建一个双y轴图.它工作但我无法从输入图形中获取一些元素.我建立这两个图有两个数据帧Base1和Base2(我加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) 我打开这个问题有三个原因:第一,用ggplot重新开启双轴讨论.其次,要问是否有一种非折磨的通用方法来做到这一点.最后,请求您提供有关解决方案的帮助.
我意识到关于如何将辅助轴添加到ggplot有多个讨论和问题.这些通常最终得出两个结论之一:
这很糟糕,不要这样做:Hadley Wickham在这里回答了同样的问题,得出结论认为这是不可能的.他有一个非常好的论据,即"使用单独的y尺度(不是彼此变换的y尺度)从根本上是有缺陷的".
然而,这里是我经常遇到的一些情况,其中可视化将极大地受益于双轴.我抽象了下面的概念.
该图是宽的,因此重复右侧的y轴将有助于(或顶部的x轴)将使解释变得容易.(我们都偶然发现了其中一个我们需要在屏幕上使用标尺的图,因为轴太远了)

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

一般问题:鉴于新的可扩展性功能ggplot 2.0.0,是否有更强大的无折磨方式来使双轴不使用网格?
最后一条评论:我绝对同意双轴的错误使用可能会产生危险的误导......但是,对于信息可视化和数据科学而言,情况并非如此?
解决方法问题:
目前,我需要一个百分比轴(第二种情况).我用过annotate并geom_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) 在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"))