我需要使用不同的errorbar caps行样式(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,等等。所以除了|———————————————————————————————————————————————————————————————————————
python - 误差线帽的线型-LMLPHP

最佳答案

你可以用任何你喜欢的符号作为误差线帽。

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()

python - 误差线帽的线型-LMLPHP
但是,正如您注意到的,错误条的两个标记是相同的。例如
<---<.set_marker("^"))或o---o.set_marker("o"))显然是可能的,而像>---<这样的事情不是-或者至少不是那么容易。
为了产生不同的上限和下限(>---<),可以将errorbar创建分成3个部分:errorbar本身没有上限加上一个上限图和一个下限图。
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()

python - 误差线帽的线型-LMLPHP

09-27 09:20