我需要使用不同的线型错误栏帽(matplotlib / pyplot)。 代码:
import matplotlib.pyplot as plt
import math
import numpy as np
fig = plt.figure()
default_size = fig.get_size_inches()
fig.set_size_inches((default_size[0]*2, default_size[1]*2))
x = np.array([math.log(1/8100,10), math.log(1/2025,10), math.log(1/900,10), math.log(1/225,10), math.log(1/100,10), math.log(1/25,10), math.log(1/9,10), math.log(1/4,10)])
err = np.array([0.0, 0.0511919632, 0.0901150419, 0.2201860606, 0.2515436715, 0.3060438313, 0.2990926056, 0.1011243898, 0.0, 0.0541676892, 0.0405075604, 0.0634289157, 0.1107514665, 0.1821387670, 0.2449796704, 0.2120694129, 0.0, 0.0474213990, 0.0423746910, 0.0409827213, 0.0553901830, 0.1136068198, 0.1878500012, 0.2665951693])
y = np.array([0.9779133796, 1.2868842184, 1.2282204495, 1.4052313201, 1.4373060067, 1.2971323397, 1.2214902860, 1.0246309381, 1.4085423946, 1.6703182160, 1.7321032153, 1.8226118650, 1.7983345102, 1.6748284241, 1.4835424022, 1.1404502085, 1.4348299503, 1.7042673230, 1.7949013577, 1.8661885162, 1.8814286876, 1.7666944544, 1.6410772747, 1.2509882123])
plt.plot(x[0:8], y[0:8], linestyle="solid", label="B", marker="s", color="black")
plt.plot(x[0:8], y[8:16], linestyle="dashed", label="P", marker="o", color="black")
plt.plot(x[0:8], y[16:24], linestyle="dotted", label="W", marker="*", color="black")
plt.errorbar(x[0], y[0], yerr=err[0], marker='s', capsize=12, markersize="12", mfc='blue', color='blue')
plt.errorbar(x[1], y[1], yerr=err[1], marker='s', capsize=12, markersize="12", mfc='green', color='green')
plt.errorbar(x[2], y[2], yerr=err[2], marker='s', capsize=12, markersize="12", mfc='red', color='red')
plt.errorbar(x[3], y[3], yerr=err[3], marker='s', capsize=12, markersize="12", mfc='yellow', color='yellow')
plt.errorbar(x[4], y[4], yerr=err[4], marker='s', capsize=12, markersize="12", mfc='orange', color='orange')
plt.errorbar(x[5], y[5], yerr=err[5], marker='s', capsize=12, markersize="12", mfc='purple', color='purple')
plt.errorbar(x[6], y[6], yerr=err[6], marker='s', capsize=12, markersize="12", mfc='magenta', color='magenta')
plt.errorbar(x[7], y[7], yerr=err[7], marker='s', capsize=12, markersize="12", mfc='navy', color='navy')
plt.errorbar(x[0], y[8], yerr=err[8], marker='o', capsize=12, markersize="12", mfc='blue', color='blue')
plt.errorbar(x[1], y[9], yerr=err[9], marker='o', capsize=12, markersize="12", mfc='green', color='green')
plt.errorbar(x[2], y[10], yerr=err[10], marker='o', capsize=12, markersize="12", mfc='red', color='red')
plt.errorbar(x[3], y[11], yerr=err[11], marker='o', capsize=12, markersize="12", mfc='yellow', color='yellow')
plt.errorbar(x[4], y[12], yerr=err[12], marker='o', capsize=12, markersize="12", mfc='orange', color='orange')
plt.errorbar(x[5], y[13], yerr=err[13], marker='o', capsize=12, markersize="12", mfc='purple', color='purple')
plt.errorbar(x[6], y[14], yerr=err[14], marker='o', capsize=12, markersize="12", mfc='magenta', color='magenta')
plt.errorbar(x[7], y[15], yerr=err[15], marker='o', capsize=12, markersize="12", mfc='navy', color='navy')
plt.errorbar(x[0], y[16], yerr=err[16], marker='*', capsize=12, markersize="12", mfc='blue', color='blue')
plt.errorbar(x[1], y[17], yerr=err[17], marker='*', capsize=12, markersize="12", mfc='green', color='green')
plt.errorbar(x[2], y[18], yerr=err[18], marker='*', capsize=12, markersize="12", mfc='red', color='red')
plt.errorbar(x[3], y[19], yerr=err[19], marker='*', capsize=12, markersize="12", mfc='yellow', color='yellow')
plt.errorbar(x[4], y[20], yerr=err[20], marker='*', capsize=12, markersize="12", mfc='orange', color='orange')
plt.errorbar(x[5], y[21], yerr=err[21], marker='*', capsize=12, markersize="12", mfc='purple', color='purple')
plt.errorbar(x[6], y[22], yerr=err[22], marker='*', capsize=12, markersize="12", mfc='magenta', color='magenta')
plt.errorbar(x[7], y[23], yerr=err[23], marker='*', capsize=12, markersize="12", mfc='navy', color='navy')
plt.savefig("plot.pdf")
plt.show()
plt.close()
我的意思是不使用水平线,而是使用> ----< (旋转90度以查看我的意思)或o --- o等等。除了| ----- |之外的任何其他内容然后重叠的栏不会互相隐藏:
答案 0 :(得分:3)
您可以使用任何您喜欢的符号作为错误栏上限。
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(4)
y=np.log(np.array([4,2,5,7]))
yerr = [1,3,2,5]
l, caps, c = plt.errorbar(x,y,yerr, marker='s', capsize=4, markersize=12,
mfc='blue', color='blue')
l2, caps2, c2 = plt.errorbar(x,y+4,yerr, marker='s', capsize=8, markersize=12,
mfc='limegreen', color='limegreen')
for cap in caps:
cap.set_marker("^")
for cap in caps2:
cap.set_marker(ur"$\u266B$")
plt.show()
但是,正如您所注意到的,错误栏的两个标记都是相同的。即类似的东西
<---<
(.set_marker("^")
)或o---o
(.set_marker("o")
)显然是可能的,而>---<
之类的东西不是 - 或者至少不那么容易。
为了产生上限和下限(>---<
)的不同上限,可以将错误栏创建分为3部分:错误栏本身没有上限加上一个上限和一个下限分别是。
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(4)
y=np.log(np.array([4,2,5,7]))
yerr = np.array([1,3,2,5])
plt.errorbar(x,y,yerr, marker='s', capsize=0, markersize=12, color='blue')
plt.plot(x,y+yerr, marker="v", ls="", color="blue", ms=8)
plt.plot(x,y-yerr, marker="^", ls="", color="blue", ms=8)
plt.errorbar(x,y+4,yerr, marker='o', capsize=0, markersize=12, color='limegreen')
plt.plot(x,y+4+yerr, marker="v", ls="", color='limegreen', ms=8)
plt.plot(x,y+4-yerr, marker="^", ls="", color='limegreen', ms=8)
plt.show()