matplotlib 中带有错误条的日志图不起作用
Log plot with error bars in matplotlib doesn't work
我正在尝试使用以下组件创建绘图:
- 散点图
- 带误差线的最佳拟合线。
- Y 缩放为对数。
所以这是保存为 png 的标准对数线性图,但是虽然我可以使散点图正常工作,但我无法在图表上绘制拟合线。我只得到一团。这是我正在使用的代码:
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
因为你没有提供任何数字,我只好猜测。
但这行得通,所以您的数据可能很奇怪(您是否放大过以查看 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')
结果:
- 散点图
- 带误差线的最佳拟合线。
- Y 缩放为对数。
所以这是保存为 png 的标准对数线性图,但是虽然我可以使散点图正常工作,但我无法在图表上绘制拟合线。我只得到一团。这是我正在使用的代码:
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
因为你没有提供任何数字,我只好猜测。
但这行得通,所以您的数据可能很奇怪(您是否放大过以查看 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')
结果: