首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python绘图中的标签范围和颜色

Python绘图中的标签范围和颜色
EN

Stack Overflow用户
提问于 2017-04-01 19:26:39
回答 3查看 1.8K关注 0票数 0

在下面,我试图用颜色和标签来绘制每个j的变化点。我得到的是不同的颜色和传奇中的每对夫妇的一个标签(i,j):

代码语言:javascript
复制
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的解决方案在这种情况下是否有效。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-01 19:46:51

i上的第二个循环不是很无用吗?

代码语言:javascript
复制
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()

更新问题的解决办法:

代码语言:javascript
复制
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(),希望有不同的颜色/图例条目。

代码语言:javascript
复制
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()

票数 1
EN

Stack Overflow用户

发布于 2017-04-01 19:31:12

您可以使用matplotlib 循环器。设置要迭代的颜色列表,然后在j-loop中使用my_cycle.next()获取颜色。然后将该颜色传递到对plt.plot的调用中。

票数 1
EN

Stack Overflow用户

发布于 2017-04-01 19:52:38

您可以使用sin或cos函数来控制颜色选择,并添加一个变量,该变量仅在j更改时才会更改,以控制是否绘制新标签。

代码语言:javascript
复制
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()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43161073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档