2017-04-01 167 views
0

在下面我试图用每个j改变颜色和标签来绘制点。什么我得到的是不同的颜色和传说中的一个标签,每对夫妇(I,J):Python中的标签范围和颜色图

import itertools 
import numpy as np 
import matplotlib.pyplot as plt 

color_list = ["blue", "brown", "red", "black"] 
g = itertools.cycle(color_list) 

primes = (139,149,151,157,163,167) 
for j in range(50, 300, 10): 
    col = next(g) 
    for k in (primes): 
     for l in range(10000, 20000, 500): 
      start = time.time() 
      generator(j, k, l) 
      end = time.time() 
      plt.plot(l, end - start, linewidth = 2, marker='o', color=col) 

编辑:更新我原来问题的代码,就好像我无法弄清楚Ernest + Arya的解决方案可以在这种情况下工作。

回答

1

是不是第二个循环超过i很无用?

import numpy as np 
import matplotlib.pyplot as plt 

for j in range (0, 2): 
    x = np.arange(0,9,2) 
    y = np.ones_like(x)*j + 0.5 
    plt.plot(x,y, marker='o', label='$n = {j}$'.format(j=j)) 

plt.legend()  
plt.show() 

enter image description here

解更新问题:

import itertools 
import numpy as np 
import matplotlib.pyplot as plt 

color_list = ["blue", "brown", "red", "black"] 
g = itertools.cycle(color_list) 

for j in range (0, 2): 
    col = next(g) 
    x = np.arange(0,9,2) 
    y = np.ones_like(x)*j + 0.5 
    plt.plot(x,y, marker='o', color=col, label='$n = {j}$'.format(j=j)) 
plt.legend() 
plt.show() 

enter image description here

解第二更新;这个想法总是一样的:使用多达plt.plot()的电话,因为您想要有不同的颜色/图例条目。

import numpy as np 
import matplotlib.pyplot as plt 
import time 

def generator(j,k,l): 
    #some operation that takes a little time 
    a = np.random.rand(k % 7, l-1000, j%13) 
    return a 

color_list = ["blue", "brown", "red", "black"] 

primes = (139,149,151,157,163,167) 
for j in range(50, 300, 25): 
    x = []; y = [] 
    for k in (primes): 
     for l in range(10000, 20000, 1000): 
      start = time.time() 
      generator(j, k, l) 
      end = time.time() 
      x.append(l); y.append(end - start) 
    plt.plot(x,y, ls="", marker='o', label='$n = {j}$'.format(j=j)) 

plt.legend() 
plt.show() 

enter image description here

+0

我同意,但它只是两个或多个嵌套循环的简化示例,不一定要绘制这些点。 –

+0

当然,但同样的策略适用于任何数量的地块。只是不要使用内部的''''循环。 (这也适用于编辑的问题。) – ImportanceOfBeingErnest

+0

第二次编辑的另一个更新。 – ImportanceOfBeingErnest

1

您可以使用matplotlib cycler。设置你想要遍历的颜色列表,然后在j -loop里面,使用my_cycle.next()获得颜色。然后将此颜色传入plt.plot

+0

它与'itertools.cycle()'相似吗? –

+0

是的 - 它依赖于'itertools.cycle()'并增加了一些额外的自我意识,比如它的长度。 –

1

可以使用正弦或余弦函数来控制颜色的选择,并添加只改变一个变量,当j的变化,从而控制是否绘制一个新的标签

import numpy as np 
import matplotlib.pyplot as plt 
import math 

last_j = -1 
z = 5 
for j in range (0, z): 
    color = ((math.sin(j)+1)/2,(math.cos(j+1)+1)/2,(math.cos(j)+1)/2) 
    for i in range (0, 10, 2): 
     if j == last_j: 
      plt.plot(i + 0.5, j + 0.5, c=color, linewidth = 2, marker='o') 
     else: 
      plt.plot(i + 0.5, j + 0.5, c=color, linewidth = 2, marker='o', 
       label='$n = {j}$'.format(j=j)) 
     last_j = j 

ax = plt.gca() 
legend = ax.legend(loc = 'center right', shadow=True) 

plt.show() 

enter image description here