标签: errorbar

如何在ggplot2中为我的条形图添加SE错误栏?

我用ggplot2制作了一个简单的条形图,比较了2种昆虫的雄性和雌性的平均寿命(年龄).我的代码看起来像这样,"数据集"就是我的数据集......

    gplot(dataset, aes(Species, Age, fill=Sex))+
stat_summary(fun.y = mean, geom = "bar", position = "dodge")+
scale_fill_manual(values = c("Grey25", "Grey"))+
theme(legend.title = element_blank())+
scale_y_continuous(limits = c(0,15))
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码手动输入平均值±SE来设置误差条的限制.为简单起见,我们假设物种1的平均值= 10且SE = 0.5.

geom_errorbar(aes(ymin=9.5, ymax=10.5),width=.2,position=position_dodge(.9))
Run Code Online (Sandbox Code Playgroud)

此代码确实有效,但它为我的绘图中的每个条设置了相同的误差条.

如何为我的绘图中的每个条添加等于相应SE的误差线?

我对ggplot和R一般都很新,所以欢迎任何帮助/建议.

r bar-chart ggplot2 errorbar

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

如何删除geom_errorbar中误差线的末端

我希望运行以下代码:

g <- ggplot (df, aes(x=Age, y=RSL, shape = Type)) +
  geom_point() +
  scale_shape_manual(values=c(1,15,5)) + #makes open circle/triangle
  theme(axis.line=element_line(colour = "black", size = 0.5, linetype = "solid")) + # adds solid black x and y axis
  geom_errorbar(aes(ymin=y_min_error, ymax=y_max_error)) + # y error bar
  geom_errorbarh(aes(xmin=x_min_error, xmax=x_max_error)) +
  ylim(0,120) +  # y axis limits
  theme_classic() +
  theme(legend.position="bottom")

g  
Run Code Online (Sandbox Code Playgroud)

如何删除误差条上的刻度线末端?

另外,如果有人可以建议我如何轻松删除代码中的多余空间,那就太好了。我dput用来提取我的数据帧的样本,但是每当我在控制台中复制代码时,我也会获得很多额外的空间。

示例数据框:

df <- structure(list(SITCD = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 
 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 errorbar

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

Matplotlib 不对称,太远了

据我所知,matplotlib 只是为我的误差线绘制了错误的值。我已经尽可能简化了我的代码,直到对值进行硬编码,但事情仍然是错误的...在下面的示例中,我通过 绘制了完全相同的值scatter,它们出现在我期望的位置到 - 但误差线还很遥远。我是不是误会了什么?

最小的例子:

from matplotlib.pyplot import *

x = [1, 2, 3, 4, 5]
y = [5, 11, 22, 44, 88]
err = [[4.3, 10.1, 19.8, 40, 81.6],
       [5.9, 13.6, 24.6, 48.5, 100.2]]

figure();
errorbar(x, y, yerr=err, label="data")
scatter(x, err[0], c='r', label="lower limit")
scatter(x, err[1], c='g', label="upper limit")

legend()
show()
Run Code Online (Sandbox Code Playgroud)

结果:上面代码示例的结果

python matplotlib errorbar

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

Python:在循环中以对数对数比例绘制误差条,然后保存图像

我有 58 个文件需要绘制。其中一些是空的(并不重要,我已经用 if 条件跳过了它们)。我需要使用对数刻度和误差线绘制文件中的数据。我想最后保存这些情节。我正在使用Python,spyder。我编写了以下代码:

route='/......./'
L=np.arange (1,59, 1)
for i in range (L.shape[0]):
    I=L[i]
    name_sq= 'Spectra_without_quiescent_'+('{}'.format(I))+'.dat' 
    Q=np.loadtxt(route+name_sq)
    if (len(Q) != 0):
        x=Q[:,1]
        y=Q[:,2]
        z=Q[:,3]
        fig=plt.errorbar(x,y,yerr=z, fmt = 'b')
        fig.set_yscale('log')
        fig.set_xscale('log')
        xlabel='Frequency'
        ylabel='Flux'
        title='Spectrum_'+('{}'.format(I))+'.dat'
        name='Spectrum_without_quiescent_'+('{}'.format(I))+'.pdf'
        fig.savefig(route+name, fig)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 540, in runfile
    execfile(filename, namespace)
  File "/media/chidiac/My Passport/DOCUMENTS/My_Publications/2-3C273_radio_spectra/Maximum_flux_code.py", line 49, in <module>
    fig.set_yscale('log')
AttributeError: 'ErrorbarContainer' object has no attribute 'set_yscale'
Run Code Online (Sandbox Code Playgroud)

我仍然是Python的初学者,我找不到错误,或者如何修复它。非常感谢任何帮助。

python plot loglog errorbar

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

用 geom_bar() 覆盖两个条形图

我试图将两个条形图叠加在彼此之上,而不是旁边。数据来自同一个数据集。我想要 x 轴上的“块”和“开始”和“结束”作为覆盖条形图。

    Block   Start       End
1    P1L     76.80       0.0
2    P1S     68.87       4.4
3    P2L     74.00       0.0
4    P2S     74.28       3.9
5    P3L     82.22       7.7
6    P3S     80.82      17.9
Run Code Online (Sandbox Code Playgroud)

我的脚本是

 ggplot(data=NULL,aes(x=Block))+
    geom_bar(data=my_data$Start,stat="identity",position ="identity",alpha=.3,fill='lightblue',color='lightblue4')+
    geom_bar(data=my_data$End,stat="identity",position ="identity",alpha=.8,fill='pink',color='red')
Run Code Online (Sandbox Code Playgroud)

我得到错误:ggplot2 不知道如何处理数字类的数据

我也试过

    ggplot(my_data,aes(x=Block,y=Start))+
      geom_bar(data=my_data$End, stat="identity",position="identity",...)
Run Code Online (Sandbox Code Playgroud)

有谁知道我怎样才能做到这一点?谢谢你。

编辑:

如何获得闪避叠加条?

我编辑这篇文章,因为我的下一个问题是相关的,因为它与我原来的帖子相反。

@P.merkle

我不得不将我的绘图更改为四个条形图,显示所有标记为 L 和 S 的区块的平均值。 L 代表沿海地区,S 代表沿海地区。他们进行了两种处理:正常和减少。

我已经计算了平均值和它们的标准差。我需要四个带有各自误差条的条形: Normal/Littoral , Reduced/Littoral , Normal/Sublittoral , Reduced/Sublittoral 。

问题是当我绘制它时,沿海酒吧和两个亚沿海酒吧相互重叠!所以现在我希望它们不要重叠!我怎样才能让它发生?我已经尝试了各种position = 'dodge'position = position_dodge(newdata$Force),但没有运气......

我的newdata包含以下信息:

Zonation Force …

overlay r ggplot2 errorbar

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

ggplot2:点代表个体观察结果,条代表平均值和标准差

我想建立一个如下所示的情节:

在此输入图像描述

其中各个观察值表示为点,每组的平均值表示为线段,另外两个线段表示平均值+/-标准差。我能够使用下面的代码生成上面的图,该代码用于geom_crossbar绘制线段。然而,这感觉更像是一种黑客攻击。我是新手ggplot2,我想知道是否有更好的方法来实现我想要的。

library(ggplot2); library(dplyr)
theme_set(theme_bw(base_size=12, base_family="Helvetica"))

dat = data.frame(y=rnorm(10), treat=rep(c("A", "B"), each=5))
summData = dat %>% group_by(treat) %>% summarize(mean_y=mean(y), sd_y=sd(y))
summData$lower = summData$mean_y-summData$sd_y
summData$upper = summData$mean_y+summData$sd_y

mBarWidth = 0.5; sdBarWidth = 0.3
mBarSize = 2; sdBarSize = 0.8
barColor = adjustcolor("grey10", alpha.f=0.4)

p = ggplot()
p = p + geom_point(data=dat, aes(x=treat, y=y), color="skyblue")
p = p + geom_crossbar(data=summData, aes(x=treat, y=lower, ymin=lower, ymax=lower), width=sdBarWidth, color=barColor, fatten=1, size=sdBarSize)
p = p + geom_crossbar(data=summData, aes(x=treat, y=mean_y, ymin=mean_y, ymax=mean_y), width=mBarWidth, …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 errorbar

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

Python - 绘制带有不均匀错误(高低)的错误条形图

我是 Stack Overflow 的新手,所以如果这是一个重复的问题或含糊不清,我深表歉意 - 我也是 Python 和一般编码的新手。

我想创建一个错误条形图,该图在高与低之间具有不相等的“错误限制”。

我将绘制一个月的平均温度,上误差需要是当月的最高温度,下误差需要是当月的最低温度。

我了解如何使用误差相等的误差线,但不了解如何使它们不相等。

已添加图片以供参考。我将用于绘制图表的列表的简短示例是:

temps_avg = [46, 49, 58, 69, 73, 79, 84]
temps_high = [78, 80, 82, 88, 88, 93, 101]
temps_low = [21, 29, 25, 48, 54, 62, 70]
Run Code Online (Sandbox Code Playgroud)

我想复制的条形图但没有错误条

我想复制的条形图但没有错误条

python matplotlib errorbar

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

绘制数据框中多列的带有误差条的条形图

我正在尝试做一些应该很简单的事情,但无法通过其他人的类似问题找到答案。我想绘制存储在数据框中的几组数据的条形图,其中误差条值也存储在数据框中。

我有一个来自商业软件的数据框,它有多个列,我想将其制作成一个集群条形图,我只能使用 df.plot.bar() 正确地完成它。我现在遇到的问题是我无法弄清楚如何从同一数据帧正确添加误差线。

此代码可以很好地从相同格式的示例数据生成我想要的绘图类型:

df = pd.DataFrame()

#the groups can vary 
grp1 = 'a'
grp2 = 'b'
grp3 = 'c'

df['label'] = ['ID_1','ID_2','ID_3']
df[grp1+'_int'] = [5,5.5,6]
df[grp1+'_SD'] = [1,2,3]
df[grp2+'_int'] = [7,6,5]
df[grp2+'_SD'] = [2,1,1.5]
df[grp3+'_int'] = [6.5,5,5.5]
df[grp3+'_SD'] = [1.5,1.5,2]

ax = df.plot.bar(x='label', y=[grp1+'_int',grp2+'_int',grp3+'_int'])
plt.show()
Run Code Online (Sandbox Code Playgroud)

如何从相应的 *_SD 列添加误差条(只有正值就可以,但实际上可以是任何误差条)?

编辑:这个问题似乎与我的真实数据框中的行数有关。以下是工作和非工作测试代码的示例:

不工作(抛出 ValueError:错误必须是 [ 标量 | N、Nx1 或 2xN 类似数组 ]):

df = pd.DataFrame()

#the groups can vary 
grp1 = 'a'
grp2 = 'b'
grp3 = 'c'

df['label'] = ['ID_1','ID_2','ID_3','ID_4'] …
Run Code Online (Sandbox Code Playgroud)

python bar-chart dataframe pandas errorbar

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

python 中的 Matplotlib 非对称误差条绘图

尝试绘制范围从负值到正值的不对称误差条时遇到错误。我修改了文档中的示例:

import numpy as np
import matplotlib.pyplot as plt

# example data
x = np.arange(0, 4, 1)
y = -0.2* x


# example error bar values that vary with x-position
error = 0.1 + 0.2 * x

# error bar values w/ different -/+ errors that
# also vary with the x-position
lower_error = -1 * error
upper_error = 4* error
asymmetric_error = [lower_error, upper_error]

plt.errorbar(x, y, yerr=asymmetric_error, fmt='.', ecolor = 'red')
plt.show()
Run Code Online (Sandbox Code Playgroud)

给出了以下情节:

在此输入图像描述

但对于不对称误差具有以下值:

array([-0.1, -0.3, -0.5, -0.7]), array([0.4, …

python plot matplotlib errorbar

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

如果类别中的数据点少于 3 个,如何隐藏错误栏

当有超过 3 个数据点可用时(条件 A),我希望在条形图中显示误差线,但当该特定条件的数据点少于 3 个时(条件 B),则忽略误差线。

我只找到了显示或隐藏所有条的错误条的选项,而不是针对特定条件的选项。

import pandas as pd
import seaborn as sns
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(15)), columns=["Value"])
df["Label"]="Condition A"
df.Label[13:]="Condition B"
sns.barplot(data=df, x="Label", y="Value", errorbar="sd")
Run Code Online (Sandbox Code Playgroud)

实际结果:所有条上的误差条:

实际结果,所有条形图上的误差条

期望的结果:仅条件 A 的误差线:

期望的结果,条件 B 中没有误差线

python matplotlib bar-chart seaborn errorbar

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

标签 统计

errorbar ×10

python ×6

ggplot2 ×4

matplotlib ×4

r ×4

bar-chart ×3

plot ×3

dataframe ×1

loglog ×1

overlay ×1

pandas ×1

seaborn ×1