【问题标题】:Log plot with error bars in matplotlib doesn't workmatplotlib 中带有误差线的日志图不起作用
【发布时间】:2015-01-16 16:01:06
【问题描述】:

我正在尝试使用以下组件创建绘图:

  1. 散点图
  2. 误差线的最佳拟合线。
  3. Y 缩放为对数。

所以这是一个保存到 png 的标准对数线性图,但是虽然我可以让散点图正常工作,但我无法在图表上绘制拟合线。我只得到一个blob。这是我正在使用的代码:

   import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    fig = plt.figure()
    ax = fig.add_subplot(111,  xlim=(-2,2), ylim=(1,10E11))
    ax.scatter(x, y, s=1, c='black')
   line, = ax.semilogy([-0.5, 1], [-0.5*m+c, 1.0*m + c], color='red', linestyle='-', linewidth=2)
    ax.errorbar(-0.5, -0.5*m+c, yerr=ser, marker='o', color='red')
    ax.errorbar(1, m * 1.0 + c, yerr=ser, marker='o', color='green')
    ax.set_yscale('log')
    fig.savefig('log.png')

我得到了散点图。和对数刻度,但不是拟合线或误差线。

x = np.array(x)
y = np.array(y)
~50,000 points
m = gradient = 2.38329162e+09   
c = 1.24269722e+09

我尝试了很多变化,但我似乎无法正确绘制线条。我找不到一个带有对数刻度的误差线图示例。

作为更新,我终于可以让生产线正常工作了。这是由于 y 航向低于零。但是我仍然无法绘制误差线。我只能得到一个胡须线图(不是四个),没有水平连接线。

matplotlib 版本:1.2.0

【问题讨论】:

  • 请提供xymc的示例。
  • 对数刻度不能有负数,c-m 是负数。实际上相当多 ;) 你将ylim 的下限设置为 1。
  • @hitzg 我期待 matplotlib 会处理这个问题并绘制它可以做的事情,但这一定是在工作中扔扳手的问题。呵呵!
  • @Navonod 正如您在我的回答中看到的那样,matplotlib 实际上处理了负值(仅显示限制内的任何值)。那这能解决你的问题吗?
  • @hitzg 就我而言,根本没有线路。感谢您的回答。

标签: python matplotlib


【解决方案1】:

由于你没有提供任何数字,我不得不猜测。

但这有效,所以你的数据可能很奇怪(你放大看ser 是不是真的很小?)

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(500,1)*2 -1
y = np.random.rand(500,1)*1e10

m = gradient = 2.38329162e+09   
c = 1.24269722e+09
ser  = 1e10

fig = plt.figure()
ax = fig.add_subplot(111,  xlim=(-2,2), ylim=(1,10E11))
ax.scatter(x, y, s=1, c='black')
ax.plot([-1, 1], [m * -1.0 + c, 1.0*m + c], color='red', linestyle='-', linewidth=2)
ax.errorbar(-1, m * -1.0 + c, yerr=(ser), marker='o', color='green')
ax.errorbar(1, m * 1.0 + c, yerr=(ser), marker='o', color='green')
ax.set_yscale('log')
fig.savefig('log.png')

结果:

【讨论】:

  • 我仍然无法让错误栏正常工作。误差线只是部分出现。例如,我只是其中一根胡须,没有与该点相关的垂直线。
  • 请在您的问题中添加一个图表。
猜你喜欢
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 2012-10-13
  • 2013-11-17
  • 1970-01-01
相关资源
最近更新 更多