相关疑难解决方法(0)

使用ggplot2,我可以在轴上插入一个断点吗?

我想制作一个条形图,其中一个值比所有其他值大得多.有没有一种不连续的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?我想不出任何其他绘制数据的方式(除了转换它,我不想做)

r ggplot2

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

寻求由ggplot 2.2.0破坏的gtable_add_grob代码的解决方法

在具有多个构面变量的图中,ggplot2重复"外部"变量的构面标签,而不是在"内部"变量的所有级别上具有单个跨越构面条带.我有一直在使用,以覆盖与使用单个跨越小面条重复外端面标签一些代码gtable_add_grobgtable包.

不幸的是,由于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)

r ggplot2 grob gtable

16
推荐指数
2
解决办法
1428
查看次数

ggplot2::coord_cartesian 在方面

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 的一个方面需要更好的限制

在 之前的版本中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)

r facet ggplot2 ggproto

12
推荐指数
2
解决办法
453
查看次数

R:如何在facet_grid上使用带自由范围轴的coord_cartesian

考虑一些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)

plottttt

想象一下,我只想放大上图中的顶行,只显示3到4之间的y轴值.coord_cartesian()如果它们没有刻面或我想放大所有绘图,我可以这样做,但是在这种情况下没有一个好的解决方案.我想我可以先将数据子集化,但这是有充分理由的禁忌(例如,会抛弃任何统计层等).

(请注意,问题与此有关:R:{ggplot2}:如何/我可以独立调整facet_grid图上的x轴限制吗?但是那里的答案不适用于此目的.)

r ggplot2

11
推荐指数
2
解决办法
5311
查看次数

使用小平面包裹设置单独的y轴限制,不使用刻度free_y

我有这些数据

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限制吗?

r ggplot2

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

R:使用ggplot2的散点图矩阵,主题因面板而异

我想使用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)

r ggplot2

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

找到弯曲的肘部/膝盖

我有这些数据:

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)

在此输入图像描述

看起来不会做这个工作.

任何的想法?

r inflection data-mining loess

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

标签 统计

r ×7

ggplot2 ×6

data-mining ×1

facet ×1

ggproto ×1

grob ×1

gtable ×1

inflection ×1

loess ×1