我想制作一个条形图,其中一个值比所有其他值大得多.有没有一种不连续的y轴方法?我的数据如下:
df <- data.frame(a = c(1,2,3,500), b = c('a1', 'a2','a3', 'a4'))
p <- ggplot(data = df, aes(x = b, y = a)) + geom_bar()
p <- p + opts(axis.text.x=theme_text(angle= 90, hjust=1)) + coord_flip()
p
Run Code Online (Sandbox Code Playgroud)

有没有办法让我的轴可以从1到10,然后是490 - 500?我想不出任何其他绘制数据的方式(除了转换它,我不想做)
在具有多个构面变量的图中,ggplot2重复"外部"变量的构面标签,而不是在"内部"变量的所有级别上具有单个跨越构面条带.我有一直在使用,以覆盖与使用单个跨越小面条重复外端面标签一些代码gtable_add_grob从gtable包.
不幸的是,由于facet strip的grob结构发生了变化,此代码不再适用于ggplot2 2.2.0.具体来说,在ggplot2的早期版本中,facet标签的每一行都有自己的一组grob.但是,在版本2.2.0中,看起来每个facet标签的垂直堆栈都是单个grob.这打破了我的代码,我不知道如何解决它.
这是一个具体的例子,取自几个月前我回答的SO问题:
# Data
df = structure(list(location = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L), .Label = c("SF", "SS"), class = "factor"), species = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, …Run Code Online (Sandbox Code Playgroud) coord_cartesian不允许设置每个面的坐标,并且使用其他范围限制往往会在特定的极端产生一条直线。由于我们有广泛变化的 y 范围,我们不能在所有方面设置相同的限制;在绘图之前限制数据与geom_line/ geom_path( /sf/answers/1912385051/ )不太友好,因为插入数据以到达边缘然后插入NAs 以打破上线。(最终,获得所需结果的唯一方法就是这样做,这对于其他数据来说可能有点繁重。)
https://gist.github.com/burchill/d780d3e8663ad15bcbda7869394a348a 中建议了一种解决方法,它以
test_data %>%
ggplot(aes(x=Nsubjects, y = Odds, color=EffectSize)) +
facet_wrap(DataType ~ ExpType, labeller = label_both, scales="free") +
geom_line(size=2) +
geom_ribbon(aes(ymax=Upper, ymin=Lower, fill=EffectSize, color=NULL), alpha=0.2)
Run Code Online (Sandbox Code Playgroud)
在 之前的版本中ggplot2,该要点定义coord_panel_ranges并能够控制每个方面的坐标。两个右侧面应缩小到 1-6(ish) y 轴,以便爆炸置信区间离开屏幕,并允许面主要关注数据的“正常范围”。(注意:这个test_data和这个 vis 不是我的,它取自 gist。虽然我的需求有些相似,但我认为最好留在 gist 的数据和代码的范围内。)
不幸的是,这对我来说现在失败了ggplot2-3.3.0。与最近丢失的 相关的初始错误ggplot2::scale_range,我试图通过对 burchill 代码(使用其他ggplot2:::内部函数)的这种改编来减轻这些错误:
UniquePanelCoords <- ggplot2::ggproto(
"UniquePanelCoords", ggplot2::CoordCartesian,
num_of_panels = 1,
panel_counter = 1,
panel_ranges = …Run Code Online (Sandbox Code Playgroud) 考虑一些facet_grid情节
mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point()
mt + facet_grid(vs ~ am, scales = "free")
Run Code Online (Sandbox Code Playgroud)
想象一下,我只想放大上图中的顶行,只显示3到4之间的y轴值.coord_cartesian()如果它们没有刻面或我想放大所有绘图,我可以这样做,但是在这种情况下没有一个好的解决方案.我想我可以先将数据子集化,但这是有充分理由的禁忌(例如,会抛弃任何统计层等).
(请注意,问题与此有关:R:{ggplot2}:如何/我可以独立调整facet_grid图上的x轴限制吗?但是那里的答案不适用于此目的.)
我有这些数据
library(ggplot2)
dat = data.frame(x = c(1,2,1,2),
group = c("a","a","b","b"),
y = c(10,20,1000,2000))
ggplot(dat, aes(x = x, y = y)) +
geom_point() +
geom_line() +
facet_wrap(~group, ncol = 1) +
coord_cartesian(ylim = c(0, 30))
Run Code Online (Sandbox Code Playgroud)
您可以看到B组未显示,因为我将y限制设置为0,30.我想手动为每个图表设置单独的y限制.我不想使用,scales = "free_y"因为我需要控制每个图表中的限制.
有没有办法可以做到这一点?你能以某种方式为小平面包装中的每个图表提供y限制吗?
我想使用ggplot2创建Scatter Plot Matrix.部分我应对了我的问题.我设法使用ggplot2创建三部分图:下三角 - Scatterplot,对角变量名和上三角 - 相关系数(R ^ 2).下面我给出了我的数据+代码生成我的图表.我的数据:
f =
C xval V yval corr V1
1 1622 1 1622 1 2ng
1 1622 2 1639 0.997 2ng
1 1622 3 1584 0.992 2ng
1 1622 4 1549 0.99 2ng
1 1622 5 1541 0.993 2ng
1 1622 6 1543 0.994 2ng
1 1622 7 1530 0.988 2ng
2 1639 1 1622 0.997 5ng
2 1639 2 1639 1 5ng
2 1639 3 1584 0.997 5ng
2 1639 4 …Run Code Online (Sandbox Code Playgroud) 我有这些数据:
x <- c(6.626,6.6234,6.6206,6.6008,6.5568,6.4953,6.4441,6.2186,6.0942,5.8833,5.702,5.4361,5.0501,4.744,4.1598,3.9318,3.4479,3.3462,3.108,2.8468,2.3365,2.1574,1.899,1.5644,1.3072,1.1579,0.95783,0.82376,0.67734,0.34578,0.27116,0.058285)
y <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32)
Run Code Online (Sandbox Code Playgroud)
看起来像:
plot(x,y)
Run Code Online (Sandbox Code Playgroud)
我想找到一种方法让肘/膝盖指向周围 x=6.5
我认为拟合loess曲线然后采用二阶导数可能有效但是:
plot(x,predict(loess(y ~ x)),type="l")
Run Code Online (Sandbox Code Playgroud)
看起来不会做这个工作.
任何的想法?