[英]Label ranges and colors in Python plot
在下面的內容中,我嘗試繪制顏色和標記隨每個j變化的點。 我得到的是每對夫婦(i,j)不同的顏色和圖例中的一個標簽:
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的解決方案是否可以在這種情況下工作。
您可以使用matplotlib 循環儀 。 設置要迭代的顏色列表,然后在j
循環內,使用my_cycle.next()
獲得顏色。 然后將該顏色傳遞給您對plt.plot
的調用。
是不是在第二圈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()
更新問題的解決方案:
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()
第二次更新的解決方案; 想法始終是相同的:要使用不同的顏色/圖例條目,請使用對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()
您可以使用sin或cos函數控制顏色選擇,並添加僅在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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.