Python 线图中的非重叠误差条

Python 线图中的非重叠误差条,python,matplotlib,plot,Python,Matplotlib,Plot,我正在使用Pandas和Matplotlib创建一些绘图。我想要有误差条的线图。我当前使用的代码如下所示 import matplotlib.pyplot as plt import pandas as pd import numpy as np df = pd.DataFrame(index=[10,100,1000,10000], columns=['A', 'B', 'C', 'D', 'E', 'F'], data=np.random.rand(4,6)) df_yerr = pd.D

我正在使用Pandas和Matplotlib创建一些绘图。我想要有误差条的线图。我当前使用的代码如下所示

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.DataFrame(index=[10,100,1000,10000], columns=['A', 'B', 'C', 'D', 'E', 'F'], data=np.random.rand(4,6))
df_yerr = pd.DataFrame(index=[10,100,1000,10000], columns=['A', 'B', 'C', 'D', 'E', 'F'], data=np.random.rand(4,6))

fig, ax = plt.subplots()
df.plot(yerr=df_yerr, ax=ax, fmt="o-", capsize=5)
ax.set_xscale("log")
plt.show()
有了这段代码,我在一个绘图上得到了6行(这就是我想要的)。但是,错误条完全重叠,使得绘图难以读取

有没有办法稍微改变x轴上每个点的位置,使误差条不再重叠

以下是一个屏幕截图:


实现您想要的一种方法是“手动”绘制错误条,但它既不直接,也不比您原来的方法好看得多。基本上,您要做的是让熊猫产生线图,然后遍历数据帧列,并为它们中的每一列绘制pyplot
errorbar
图,这样索引会稍微侧向移动(在您的情况下,对数刻度在x轴上,这将是一个因子的移动)。在错误条形图中,标记大小设置为零:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

colors = ['red','blue','green','yellow','purple','black']

df = pd.DataFrame(index=[10,100,1000,10000], columns=['A', 'B', 'C', 'D', 'E', 'F'], data=np.random.rand(4,6))
df_yerr = pd.DataFrame(index=[10,100,1000,10000], columns=['A', 'B', 'C', 'D', 'E', 'F'], data=np.random.rand(4,6))

fig, ax = plt.subplots()
df.plot(ax=ax, marker="o",color=colors)

index = df.index
rows = len(index)
columns = len(df.columns)

factor = 0.95
for column,color in zip(range(columns),colors):
    y = df.values[:,column]
    yerr = df_yerr.values[:,column]
    ax.errorbar(
        df.index*factor, y, yerr=yerr, markersize=0, capsize=5,color=color,
        zorder = 10,
    )
    factor *= 1.02

ax.set_xscale("log")
plt.show()
正如我所说,结果并不理想:

更新

在我看来,条形图的信息量要大得多:

fig2,ax2 = plt.subplots()
df.plot(kind='bar',yerr=df_yerr, ax=ax2)
plt.show()

例如,您可以使用
alpha
进行求解

df.plot(yerr=df_yerr, ax=ax, fmt="o-", capsize=5,alpha=0.5)

您也可以检查此项以供参考

您能显示您获得的图形的屏幕截图吗?@DavidG希望这能让我的问题更清楚。要获得更好的帮助,请提供一个。特别是检查,你可以移动点和错误条。但这将使绘图变得错误,因为点不再位于正确的x位置。你确定这就是你想要做的吗?我只是想指出,条形图通常不如组成良好的散点图或方框图(在传递信息方面)。可能很多人会说,我也同意,条形图在视觉上比上部图更吸引人。然而,这并不证明选择条形图是合理的,因为有更好的选项(视觉上和信息上)。为了给这一主张增加一些实质性内容,请参见例如。@Matthiasaras我同意你的观点,有更好的选择。但是请注意,我们并不真正知道OP想要可视化什么,因此很难知道最好的绘图类型是什么来表示他的数据。