所以我在最后一天一直围着这个圈子,希望有人可以让我摆脱痛苦。
我有一个取决于x和y值的函数f,当绘制f对y时,给出以下figure。
现在每条线的值都是x [0,1],我觉得必须有一种方法可以对图形进行着色/轮廓处理,以便可以很容易地识别哪条线对应于x的值。我尝试了很多搜索,但在这种情况下找不到任何有用的东西。
重现给出我的数据的数据的代码如下。任何帮助都会很棒,因为我觉得我在这里错过了一些明显的东西。
import numpy as np
import matplotlib.pyplot as plt
y = np.linspace(0,100)
x = np.linspace(0,1,11)
f = np.zeros(( len(y), len(x) ))
for j in range(len(x)):
i=0
for r in y:
f[i,j] = (1000 + (-r * 2)) + (1000*(1-x[j]))
i += 1
plt.plot(f, y)
答案 0 :(得分:0)
import numpy as np
import matplotlib.pyplot as plt
y = np.linspace(0, 100)
x = np.linspace(0, 1, 11)
f = np.zeros((len(y), len(x)))
for j in range(len(x)):
i = 0
for r in y:
f[i, j] = (1000 + (-r * 2)) + (1000 * (1 - x[j]))
i += 1
plt.plot(f, y)
labels = [f[xs, 0] for xs in x]
plt.legend(labels, loc='best')
plt.show()
只需修复标签
即可答案 1 :(得分:0)
我在评论中提出了一些可能性:
或密谋 3D,或 annotations,或 colormapping the lines, 或者,如果您只有非常有限的x值,请使用不同的值 linestyle 为每个人。
除此之外,您还可以专门为 x 创建一个新轴。在以下代码片段中,我将 x 值放在顶部水平轴上:
import numpy as np
import matplotlib.pyplot as plt
y = np.linspace(0,100)
x = np.linspace(0,1,11)
f = np.zeros(( len(y), len(x) ))
for j in range(len(x)):
i=0
for r in y:
f[i,j] = (1000 + (-r * 2)) + (1000*(1-x[j]))
i += 1
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()
ax2.set_xticks(x)
ax2.set_xticklabels(["%.3f" % xi for xi in x])
ax1.plot(f, y)
结果如下:
答案 2 :(得分:0)
由于线条对应于或多或少连续的x值,我会根据色彩图对线条进行着色。
然后使用colorbar
显示x
到颜色的映射。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cmx
import matplotlib.colors as colors
y = np.linspace(0,100)
x = np.linspace(0,1,11)
f = np.zeros(( len(y), len(x) ))
for j in range(len(x)):
i=0
for r in y:
f[i,j] = (1000 + (-r * 2)) + (1000*(1-x[j]))
i += 1
cn = colors.Normalize(vmin=0, vmax=1)
scalar_map = cmx.ScalarMappable(norm=cn, cmap='jet')
# see plt.colormaps() for many more colormaps
for f_, x_ in zip(f.T, x):
c = scalar_map.to_rgba(x_)
plt.plot(f_, y, color=c)
scalar_map.set_array([]) # dunno why we need this. plt.colorbar fails otherwise.
plt.colorbar(scalar_map, label='x')