matplotlib:绘制一个二维数组

时间:2017-02-16 12:07:04

标签: python matplotlib plot

所以我在最后一天一直围着这个圈子,希望有人可以让我摆脱痛苦。

我有一个取决于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)

3 个答案:

答案 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)

结果如下:

Double x axis

答案 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')

enter image description here